Sql Server 性能優化之包含列


Sql Server 性能優化之包含列

 

     導讀:數據數優化查詢一直是個比較熱門的話題,小生在這方面也只能算是個入門生。今

天我們就講下數據庫包含列這個一項的作用及帶來的優化效果

    

     引用下MSDN里面的一段解釋:

 

     當查詢中的所有列都作為鍵列或非鍵列包含在索引中時,帶有包含性非鍵列的索引可以顯

著提高查詢性能。 這樣可以實現性能提升,因為查詢優化器可以在索引中找到所有列值;不

訪問表或聚集索引數據,從而減少磁盤 I/O 操作

  

      上面這一段什么意思呢?

 

      意思就是說設置好包含列,能提高查詢性能,減少IO輸出。

      這樣說大家都覺得很抽象,下面我們舉個例子來說明這個包含列的效果,

 

      如何創建包含列索引?

 

       1、 在對象資源管理器中,單擊加號以便展開包含您要創建帶有非鍵列的索引的表的數據庫。

       2、 單擊加號以便展開“表”文件夾。

       3、單擊加號以便展開您要創建帶有非鍵列的索引的表。

       4、右鍵單擊“索引”文件夾,指向“新建索引”,然后選擇“非聚集索引…”。

       5、 在“新建索引”對話框的“常規”頁中,在“索引名稱”框中輸入新索引的名稱。

       6、 在“索引鍵列”選項卡下,單擊“添加…”。

        7、在“從 table_name 中選擇列”對話框中,選中要添加到索引的一個或多個表列的復選框。

       8、 單擊“確定”。

       9、 在“包含性列”選項卡下,單擊“添加…”。

       10、 在“從 table_name 中選擇列”對話框中,選中要作為非鍵列添加到索引的一個或多個表列的復選框。

       11、 單擊“確定”。

       12、 在“新建列”對話框中,單擊“確定”。

 

    舉個例子來說明這個包含列的效果

    

      SQL:select Sex from User Where UserName='小三'

  

    我們來看下上面的語句 根據UserName來查詢小三的性別,加入我們表中沒有建任何索引,如果數據比較少的話 這個查詢語句是沒有任何問題的,但是當我們的用戶量到達上千萬時,這個查詢可能就沒當初那么快了,這個時候怎么提高查詢效率呢?

     

     建立非聚集索引

 

     第一個方法:給UserName建立非聚集索引,建立了索引之后數據庫就能更快的找到這條數據所存在的位置。

 

    建立索引包含列

    

     第二個方法:在給UserName建立非聚集索引的同時,建議包含列,包含Sex這一列,這樣在快速定位UserName的同時又能很快定位出Sex的物理位置。包含列是對查詢條件后的一種性能補充。 

     

     適用場景:該條查詢用的非常頻繁。select age from User Where UserName='小三'

比如在查詢UserName的同時查詢age非常多 就可以考慮給UserName建立非聚集索引的時候包含age這一列。

 

    附上:建立包含列的SQL語句

    

1
2
3
4
5
6
7
8
9
USE AdventureWorks2012;
GO
-- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns. 
-- index key column is PostalCode and the nonkey columns are
-- AddressLine1, AddressLine2, City, and StateProvinceID.
CREATE  NONCLUSTERED  INDEX  IX_Address_PostalCode
ON  Person.Address (PostalCode)
INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);
GO

 

  同時歡迎到我的個人博客上做客:http://www.diyibk.com/post/140.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM