[英]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.