[英]If I have a single nonclustered index on a table, will the number of columns I include change the slow down when writing to it?
[英]Columns to include in nonclustered index
我刚刚从这里阅读https://stackoverflow.com/questions/6187904/hard-and-fast-rule-for-include-columns-in-index关于包含的列。
n 索引通常是
CREATE INDEX <name> ON <table> (KeyColList) INCLUDE (NonKeyColList)
在哪里:
现在假设我的查询是:
SELECT Col7 ,
Col8 ,
Col9 ,
Col10
FROM [MyTable] M
WHERE Col1 =1
AND Col2=2
AND Col3=3
AND Col4=4
AND Col5=5
AND Col6=6
GROUP BY Col7 ,
Col8 ,
Col9 ,
Col10
ORDER BY Col8
在这种情况下,我的索引应该是什么? 和 Col7 是主键的第二种情况
我想你会想要这样的东西:
CREATE NONCLUSTERED INDEX MyIndex ON MyTable(Col1, Col2, Col3, Col4, Col5, Col6)
INCLUDE (Col7, Col8, Col9, Col10)
您正在过滤Col1-Col6
并检索Col7-Col10
。 不过,不确定这将如何与group by
一起使用。 您可能希望将其重写为DISTINCT
,因为执行计划和结果是相同的,但它会更具可读性。
如果Col7
是主键并具有聚集索引,则可以保持原样。 Col7
将被包含在索引中而没有特别提及,因为集群键在每个非聚集索引中作为行标识符,但保留它不会受到伤害,因为 SQL 会忽略它。
对于此查询,它取决于第 1-6 列中的每一个的位置限制了多少行。 最佳索引是针对具有最高选择性并返回每个值的行数最少的列的索引。
group by 将意味着 Col7 可能会因成为索引的一部分而受益,因此行已经分组返回。
如果所有的 Col 1-6 都提供了大量的桌子,那么 Col7,Col8 可能会更好地获得正确的组。
但无论如何,您都需要进行测试,因为它取决于数据值的分布。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.