簡體   English   中英

SQL Server 2008中的聚集索引

[英]Clustered index in SQL Server 2008

我有一個帶有復合主鍵的表。 它創建聚簇索引。 如果我在WHERE子句中使用了來自該復合主鍵的幾列,那么該索引是否仍然有效? 還是我必須根據WHERE使用的列創建新索引? 任何幫助,將不勝感激。

只要索引在定義中最左邊的列都是WHERE子句的一部分,任何索引(無論是否聚集)都僅對查詢有用。

如果在(Col1,Col2,Col3)上有一個索引,則此索引對於使用所有3列, Col2Col1或僅Col1 WHERE子句很有用。 但是,一旦搜索中包括Col1 ,索引就沒有用了。

如果可能,我會盡量避免使用復合鍵-尤其是主鍵。 另外:如果您有復合鍵,則僅在使用最左邊的n列時才有效,例如,如果您在復合鍵的第三位置有一個列,而搜索在該第三列上只有WHERE ,則該索引將無法使用。

理想情況下,集群鍵應該是小的,穩定,唯一且不斷增加的列-INT或BIGINT作為默認選項。 不要超載集群密鑰! 不要將其設置得太寬,並且一定要盡量避免使用大小可變的列(例如VARCHAR它們會帶來額外的開銷)

還有一個要考慮的問題:表上的集群鍵也將添加到表上每個非集群索引的每個條目中,因此,您確實要確保它盡可能小。 通常,具有2+十億行的INT應該足以容納絕大多數表-與GUID作為集群鍵相比,您可以為磁盤和服務器內存節省數百兆的存儲空間。

再想一想-金伯利·特里普(Kimberly Tripp)的優秀著作-讀它,再讀一次,消化它! 確實,這是SQL Server索引的福音。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM