導讀:數據數優化查詢一直是個比較熱門的話題,小生在這方面也只能算是個入門生。今
天我們就講下數據庫包含列這個一項的作用及帶來的優化效果
引用下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
