Sql Server 性能優(yōu)化之包含列
?
? ? ?導(dǎo)讀:數(shù)據(jù)數(shù)優(yōu)化查詢一直是個比較熱門的話題,小生在這方面也只能算是個入門生。今
天我們就講下數(shù)據(jù)庫 包含列 這個一項的作用及帶來的優(yōu)化效果
? ??
? ? ? 引用下MSDN里面的一段解釋:
?
? ? ? 當查詢中的所有列都作為鍵列或非鍵列包含在索引中時,帶有包含性非鍵列的索引可以顯
著提高查詢性能。 這樣可以實現(xiàn)性能提升,因為查詢優(yōu)化器可以在索引中找到所有列值;不
訪問表或聚集索引數(shù)據(jù),從而減少磁盤 I/O 操作
??
? ? ?? 上面這一段什么意思呢?
?
? ? ? 意思就是說設(shè)置好包含列,能提高查詢性能,減少IO輸出。
? ? ? 這樣說大家都覺得很抽象,下面我們舉個例子來說明這個包含列的效果,
?
? ? ?? 如何創(chuàng)建包含列索引?
?
????? ?1、 在對象資源管理器中,單擊加號以便展開包含您要創(chuàng)建帶有非鍵列的索引的表的數(shù)據(jù)庫。
????? ?2、 單擊加號以便展開“表”文件夾。
????? ?3、單擊加號以便展開您要創(chuàng)建帶有非鍵列的索引的表。
????? ?4、右鍵單擊“索引”文件夾,指向“新建索引”,然后選擇“非聚集索引…”。
????? ?5、 在“新建索引”對話框的“常規(guī)”頁中,在“索引名稱”框中輸入新索引的名稱。
????? ?6、 在“索引鍵列”選項卡下,單擊“添加…”。
????????7、在“從 table_name 中選擇列”對話框中,選中要添加到索引的一個或多個表列的復(fù)選框。
????? ?8、 單擊“確定”。
????? ?9、 在“包含性列”選項卡下,單擊“添加…”。
????? ?10、 在“從 table_name 中選擇列”對話框中,選中要作為非鍵列添加到索引的一個或多個表列的復(fù)選框。
????? ?11、 單擊“確定”。
????? ?12、 在“新建列”對話框中,單擊“確定”。
?
? ?? 舉個例子來說明這個包含列的效果
? ??
? ? ? SQL:select Sex from User Where UserName='小三'
??
? ?? 我們來看下上面的語句 根據(jù)UserName來查詢小三的性別,加入我們表中沒有建任何索引,如果數(shù)據(jù)比較少的話 這個查詢語句是沒有任何問題的,但是當我們的用戶量到達上千萬時,這個查詢可能就沒當初那么快了,這個時候怎么提高查詢效率呢?
? ? ?
? ?? ?建立非聚集索引
?
? ? ?第一個方法:給UserName建立非聚集索引,建立了索引之后數(shù)據(jù)庫就能更快的找到這條數(shù)據(jù)所存在的位置。
?
? ? ?建立索引包含列
? ??
? ? ?第二個方法:在給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
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
