use*_*567 5 sql-server sql-server-2012
我有一个包含数百万行的表。这个表有一个我们经常过滤的列(意味着我们经常在WHERE子句中使用它),值是Insert/Update/Ignored。向列添加索引是否有意义?有人告诉我在少数值列上添加索引没有任何好处
如果您的索引仅包含状态字段,则很可能不会使用它,因为对于从索引中找到的每一行,您选择的其余列必须从聚集索引中获取,并且这些键查找将很昂贵,而且很可能是仅扫描聚集索引会更有效。
如果 where 子句中有其他字段,则复合索引应该效果更好。状态字段的存在还取决于它是否(经常)更新的事实,因为这也需要维护索引。
一种选择是将选择部分中的字段添加为包含列。这样查询就不必转到聚集索引并且应该运行得相当快。您应该尝试一下,看看它是否真的适合您的情况。当然,维护开销取决于几个因素,尤其是索引中包含的字段更新的频率。
如果有一种状态很少见并且用于获取行,那么过滤索引可能会起作用,但我认为这不是您的情况。
归档时间: |
|
查看次数: |
6815 次 |
最近记录: |