不同的表而不是行

时间:2013-03-15 12:17:15

标签: sql database optimization

我想知道哪种方案更快?

第一个方案:   一个表用户的列:cust_id,name,surname(有100 000行)

第二个方案:   由cust_id命名的100 000个表(在每个表中只有一行)

我不知道应该怎么做 - 我知道第二个例子不是很聪明 - 但我想知道哪一个更快查询? 如果查询速度更快

select name from users where cust_id = 194923
-> one result: John Doe

select name from users_194923
-> one result: John Doe

3 个答案:

答案 0 :(得分:4)

100 000 tables真的吗?不要那样做!

显然第二个更快,因为你知道它是什么表并且只有一个记录。但是这里有捕获,如果你想搜索5个人怎么办?你是怎样做的?如果您不知道该人的存储位置该怎么办?

数据库服务器旨在存储大量记录(每个表不是一条记录)。

如果您担心搜索记录,只需在您想要搜索的列上定义索引。

答案 1 :(得分:4)

快速练习:

当服务器处理select * from table_123456时,您认为会发生什么?魔法上发生了各种各样的事情,但服务器仍然需要确保表table_123456是否存在。在大多数数据库服务器中,验证名为table_123456的表存在与在良好索引的表中验证是否存在id=123456的行的时间大小相同。例如,SQL Server将表的名称保存在名为sys.tables的系统表中。

想象一下编写一个将返回所有名为“Peter”的用户的查询会有多么有趣。比较这两种方法是wronger than wrong

答案 2 :(得分:1)

关于第二个模式的问题是无关紧要或逻辑较少,因为您无法使用10000个表来处理数据库,每个表包含1个记录。你必须使用模式1,它是相关的,并在其中显示一些逻辑。 感谢