[英]Is it correct to use an index that features INCLUDE of all columns?
在調試SQL查詢時,SQL Server Dev Studio建議我必須創建如下索引:
CREATE INDEX IX_MY_INDEX ON T_EVENT (F_ORIGINAL_ID, F_EVENT_SEQUENCE_NO)
INCLUDE (F_USER_ID, F_REVISION_NO, ... <about 30-40 columns>)
因此,在INCLUDE
建議包含大量的列。
盡管我確實知道在main index子句中使用所有列是一個糟糕的設計,但是在INCLUDE
使用所有字段的缺點是什么? 還是在INCLUDE
之后有很多列的索引完全可以(在性能和優化方面)?
缺點是存儲和維護。 每當基礎數據發生更改時,數據將被復制並更新索引。 好處是索引將避免在計划中查找鍵,以便檢索查詢所需的其他列。
請記住,該索引只是建議,而不是建議。 最好將現有的聚集索引更改為非聚集索引(也許通過選擇性地包含列來優化查詢),並使建議的索引成為聚集索引。 是否合適取決於您的工作量和查詢組合。 一個好的索引策略需要一種整體方法,而不是專注於單個查詢/索引。
本質上,這就是聚集索引的作用。 因此,如果表沒有聚簇索引,則可以使用索引的相關列來創建一個。
將所有列都包括在內是個好主意嗎? 我想說,作為一般慣例 ,這不是一個好主意。 但是肯定有一些特定的情況是有用的。 基本上,索引是表上所有查詢的覆蓋索引。 因此,如果使用索引,則沒有對數據頁的引用。
有缺點:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.