【发布时间】:2018-12-14 11:50:34
【问题描述】:
我有一个包含超过 2500 万行的表。该表每天都在变大(大约 35 000 行)。我在 2 列上创建了非聚集索引 - 日期和债务 ID(这些列在 WHERE clouse 中最常用),每个债务 ID 在每个日期仅出现一次)。所以表仍然是堆,因为它没有聚集索引。您认为添加标识列 (1,1) 并在其上创建聚集索引是个好主意吗?或者你认为我应该怎么做才能提高这张桌子的性能?
【问题讨论】:
-
如果没有其他需要考虑的事情,我建议将您已经存在的索引转换为集群索引。
-
但是,如果我将非聚集索引转换为聚集索引,它就不会在带有 WHERE clouse 的查询中使用?我是对的,不是吗?
-
不,你不是。实际上,如果一个表只有一个聚集索引和 0 个非聚集索引,那么 每个 查询都会使用聚集索引。只需确保使用与索引键相同的 2 列,这样您的 where 就会从查找中受益。如果您需要未包含在非聚集索引中的列,这些查找可能会比以前更快。
-
所以@George,您认为创建聚集索引添加标识列没有意义?
-
我忘记了 ID 部分。好吧,我当然不能回答这个问题;这是一个深度设计选择,有很多优点、很多缺点和大量讨论。第一次谷歌搜索引导我到这里:en.wikipedia.org/wiki/Surrogate_key
标签: sql-server tsql