【发布时间】:2014-07-01 05:56:01
【问题描述】:
我在数据库中有一个规范化的表——比如说
(ID, name, age)
这里,每个条目对应一个人,ID是这个表的key。
非关键字段经常访问--通过名称字段搜索此表的频率足以满足一件事。
因此,我可以在名称字段上放置一个索引,因此该表也在该字段上建立了索引。
CTO 说这张表要分成 N 个表——每个表对应一个 非关键字段(本例中 N=2):
(ID, name)
(ID, age)
他建议这样做是为了快速访问查询。当这样分解时,这两个表中的每一个 仍然将 ID 作为键,并且表未在其他字段上建立索引。
在我看来,这并不能提供快速访问——甚至会减慢速度:
没有索引意味着在查询中再次搜索整个表
一个额外的表访问,带来原始表的整行(姓名和年龄) 而不是在找到匹配的行时在相应的行上获取它们。
这里缺少什么?
TIA
【问题讨论】:
-
你是对的。建议的解决方案没有任何好处。
-
thx - 如果您将其写为答案,我会接受。我相信这是一个完整的答案——正在寻找验证。
-
请注明您所指的数据库。也许它是某种类型的专有数据库,也许他对此有所了解,你我都不知道。我以前使用过专有数据库,它会在过滤之前读取整行。如果您谈论的是普通的现代 RDBMS,那么我建议您的 CTO 是一个小丑。
-
@Michael.M - 带有 Hibernate 的老式 MySQL,没有别的了。不确定我自己是否遗漏了什么——这很奇怪。
-
“这样分解,这两个表中的每一个仍然以ID为key,并且这些表没有在另一个字段上建立索引。” 逻辑是什么在不索引非键列的背后?
标签: sql database database-indexes