[英]Composite Index and Covering Index in SQL Server
我有一個表(ID,col1,col2)和查詢
SELECT ID FROM table WHERE col1 = 2
AND col2 = 7
我應該創建一個復合索引
CREATE NONCLUSTERED INDEX IDX_Composite ON table (ID, col1, col2)
或覆蓋指數
CREATE NONCLUSTERED INDEX IDX_Covering ON table ID INCLUDED (col1, col2)
您問題中的兩個索引都不會幫助您進行查詢。 這樣做的原因是因為第一個排序列是ID
,但是,您的過濾列位於col1
和col2
上; 因此,索引並不能幫助數據引擎快速查找您需要的行。
讓我們把你所擁有的東西放入一個經典的電話簿類比中。 假設ID
是電話號碼, Col1
是姓氏, Col2
是名字。 如果我們使用您的索引,電話電話簿是按電話號碼排序的,從“最低”電話號碼開始,到“最高”電話號碼結束。 如果您想要名為“John Smith”的人的電話號碼,您唯一的選擇是通讀整本書並找到每個 John Smith。
然而,傳統的電話簿是按姓氏排序,然后是名字,並在它們旁邊有每個人的電話號碼。 這意味着您現在可以輕松解決“John Smith 的電話號碼是多少”的問題? 翻閱這本書,首先是“Smith”,然后是“John”,然后你就有了所有的電話號碼。
因此,您的索引應該如下所示:
CREATE NONCLUSTERED INDEX IX_Composite ON table (col1, col2) INCLUDE (ID);
正如 Charlieface 所指出的,如果您的列ID
是您的聚集索引,那么實際上不需要INCLUDE
它; 聚集索引中的列會自動INCLUDE
在任何NONCLUSTERED
索引中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.