開文之前首先要講講幾個概念
【覆蓋查詢】
當索引包含查詢引用的所有列時,它通常稱為“覆蓋查詢”。
【索引覆蓋】
如果返回的數據列就包含於索引的鍵值中,或者包含於索引的鍵值+聚集索引的鍵值中,那麼就不會發 生Bookup Lookup,因為找到索引項,就已經找到所需的數據了,沒有必要再到數據行去找了。這種情況 ,叫做索引覆蓋;
【復合索引】
和復合索引相對的就是單一索引了,就是索引只包含一個字段,所以復合索引就是包含兩個或者多個 字段的索引;
【非鍵列】
鍵列就是在索引中所包含的列,當然非鍵列就是該索引之外的列了;
下面就開始今天的主題
【摘要1】
在 SQL Server 2005 中,可以通過將非鍵列添加到非聚集索引的葉級別來擴展非聚集索引的功能 。通過包含非鍵列,可以創建覆蓋更多查詢的非聚集索引。這是因為非鍵列具有下列優點:
* 它們可以是不允許作為索引鍵列的數據類型。
* 在計算索引鍵列數或索引鍵大小時,數據庫引擎不考慮它們。
當查詢中的所有列都作為鍵列或非鍵列包含在索引中時,帶有包含性非鍵列的索引可以顯著提高查詢 性能。這樣可以實現性能提升,因為查詢優化器可以在索引中找到所有列值;不訪問表或聚集索引數據, 從而減少磁盤 I/O 操作。
說明:第一:只能是針對非聚集索引;第二:比起復合索引是有性能上的提升的,因為索引的大小變 小了;
【摘要2】
鍵列存儲在索引的所有級別中,而非鍵列僅存儲在葉級別中。
說明:這就表現為包含與不包含的關系了。有關索引級別的詳細信息,請參閱表組織和索引組織。