婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解SQL Server的聚焦過濾索引

詳解SQL Server的聚焦過濾索引

熱門標(biāo)簽:我要地圖標(biāo)注數(shù)量有限制嗎 電話機(jī)器人怎么代理商 電銷需要外呼系統(tǒng)嗎 互聯(lián)網(wǎng)電話外呼系統(tǒng) 千呼電話機(jī)器人可以試用嗎 安卡拉地圖標(biāo)注app 零成本地圖標(biāo)注賺錢 400電話辦理泰安 家庭農(nóng)場地圖標(biāo)注名稱怎樣起名

前言

這一節(jié)我們還是繼續(xù)講講索引知識,前面我們聚集索引、非聚集索引以及覆蓋索引等,在這其中還有一個過濾索引,通過索引過濾我們也能提高查詢性能,簡短的內(nèi)容,深入的理解。

過濾索引,在查詢條件上創(chuàng)建非聚集索引(1)

過濾索引是SQL 2008的新特性,被應(yīng)用在表中的部分行,所以利用過濾索引能夠提高查詢,相對于全表掃描它能減少索引維護(hù)和索引存儲的代價。當(dāng)我們在索引上應(yīng)用WHERE條件時就是過濾索引。也就是滿足如下格式:

CREATE NONCLUSTERED INDEX index name>
ON table> (columns>)
WHERE criteria>;
GO

下面我們來看一個簡單的查詢

USE AdventureWorks2012
GO
SELECT SalesOrderDetailID, UnitPrice
FROM Sales.SalesOrderDetail
WHERE UnitPrice > 2000
GO

上述列中未建立任何索引,當(dāng)然除了SalesOrderDetailID默認(rèn)創(chuàng)建的聚集索引,這種情況下我們能夠猜想到其執(zhí)行的查詢計劃必然是主鍵創(chuàng)建的聚集索引掃描,如下

上述我們已經(jīng)說過此時未在查詢條件上創(chuàng)建索引,所以此時必然走的是主鍵創(chuàng)建的聚集索引,接下來我們首先在UnitPrice列上創(chuàng)建非聚集索引來提高查詢性能,

CREATE NONCLUSTERED INDEX idx_SalesOrderDetail_UnitPrice
ON Sales.SalesOrderDetail(UnitPrice)

此時我們再來比較二者查詢開銷

USE AdventureWorks2012
GO
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
SELECT SalesOrderDetailID, UnitPrice
FROM AdventureWorks2012.Sales.SalesOrderDetail WITH(INDEX([PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID]))
WHERE UnitPrice > 2000
GO
SELECT SalesOrderDetailID, UnitPrice
FROM Sales.SalesOrderDetail WITH(INDEX([idx_SalesOrderDetail_UnitPrice]))
WHERE UnitPrice > 2000

此時在查詢條件上建立了非聚集索引之后,查詢開銷提升的非常明顯,提升達(dá)到了90%以上,因?yàn)榉蔷奂饕矔昧酥麈I創(chuàng)建的聚集索引,所以這個時候不會導(dǎo)致Bookmark Lookup或者Key Lookup查找。接下來我們我們再添加一個帶有條件的非聚集索引即過濾索引

CREATE NONCLUSTERED INDEX idxwhere_SalesOrderDetail_UnitPrice
ON Sales.SalesOrderDetail(UnitPrice)
WHERE UnitPrice > 1000

此時我們再來看看創(chuàng)建了過濾索引之后和之前非聚集索引性能開銷差異:

USE AdventureWorks2012
GO
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
SELECT SalesOrderDetailID, UnitPrice
FROM AdventureWorks2012.Sales.SalesOrderDetail WITH(INDEX([idx_SalesOrderDetail_UnitPrice]))
WHERE UnitPrice > 2000
SELECT SalesOrderDetailID, UnitPrice
FROM Sales.SalesOrderDetail WITH(INDEX([idxwhere_SalesOrderDetail_UnitPrice]))
WHERE UnitPrice > 2000

此時我們知道創(chuàng)建的非聚集過濾索引與傳統(tǒng)創(chuàng)建的非聚集索引相比,我們的查詢接近減少了一半。

唯一過濾索引

唯一過濾索引對于所有列必須唯一且不為空(只允許一個NULL存在)也是非常好的解決方案,所以此時在創(chuàng)建唯一過濾索引時需要將NULL值除外,比如如下:

CREATE UNIQUE NONCLUSTERED INDEX uq_fix_Customers_Email
ON Customers(Email)
WHERE Email IS NOT NULL
GO

過濾索引結(jié)合INCLUDE

當(dāng)我們再添加一個額外列時,使用默認(rèn)主鍵創(chuàng)建的聚集索引時,此時會走聚集索引掃描,然后我們在查詢條件上創(chuàng)建一個過濾索引,我們強(qiáng)制使用這個過濾索引時,此時由于添加額外列,會導(dǎo)致需要返回到基表中再去獲取數(shù)據(jù),所以也就造成了Key Lookup查找,如下:

USE AdventureWorks2012
GO
SELECT SalesOrderDetailID, UnitPrice, UnitPriceDiscount
FROM Sales.SalesOrderDetail
WHERE UnitPrice > 2000
GO

此時我們需要用INCLUDE來包含額外列。

CREATE NONCLUSTERED INDEX [idx_SalesOrderDetail_UnitPrice] ON Sales.SalesOrderDetail(UnitPrice) INCLUDE(UnitPriceDiscount)

我們再創(chuàng)建一個過濾索引同時包括額外列

CREATE NONCLUSTERED INDEX [idxwhere_SalesOrderDetail_UnitPrice] ON Sales.SalesOrderDetail(UnitPrice) INCLUDE(UnitPriceDiscount)
WHERE UnitPrice > 2000

接下來再來執(zhí)行比較添加過濾索引和未添加過濾索引同時都包括了額外列的性能查詢差異。

SELECT SalesOrderDetailID, UnitPrice, UnitPriceDiscount
FROM AdventureWorks2012.Sales.SalesOrderDetail WITH(INDEX([idx_SalesOrderDetail_UnitPrice]))
WHERE UnitPrice > 2000 
SELECT SalesOrderDetailID, UnitPrice, UnitPriceDiscount
FROM Sales.SalesOrderDetail WITH(INDEX([idxwhere_SalesOrderDetail_UnitPrice]))
WHERE UnitPrice > 2000

此時性能用INCLUDE來包含額外列性能也得到了一定的改善。

過濾索引,在主鍵上創(chuàng)建非聚集索引(2)

在第一個案列中,我們可以直接在查詢列上創(chuàng)建非聚集索引,因?yàn)槠漕愋褪菙?shù)字類型,要是查詢條件是字符類型呢?首選現(xiàn)在我們先創(chuàng)建一個測試表

USE TSQL2012
GO
CREATE TABLE dbo.TestData 
(
  RowID    integer IDENTITY NOT NULL, 
  SomeValue  VARCHAR(max) NOT NULL,   
  StartDate  date NOT NULL,
  CONSTRAINT PK_Data_RowID
    PRIMARY KEY CLUSTERED (RowID)
);

添加10萬條測試數(shù)據(jù)

USE TSQL2012
GO
INSERT dbo.TestData WITH (TABLOCKX)
  (SomeValue, StartDate)
SELECT
  CAST(N.n AS VARCHAR(max)) + 'JeffckyWang',
  DATEADD(DAY, (N.n - 1) % 31, '20140101')
FROM dbo.Nums AS N
WHERE 
  N.n >= 1 
  AND N.n  100001;

如果我們需要獲取表TestData中SomeValue = 'JeffckyWang',此時我們想要在SomeValue上創(chuàng)建一個非聚集索引然后進(jìn)行過濾,如下

USE TSQL2012
GO
CREATE NONCLUSTERED INDEX idx_noncls_somevalue
ON dbo.TestData(SomeValue)
WHERE SomeValue = 'JeffckyWang'

更新

SQL Server對創(chuàng)建索引大小有限制,最大是900字節(jié),上述直接寫的VARCHAR(MAX),所以會出錯,切記,切記。

此時我們在主鍵上創(chuàng)建非聚集索引,我們在主鍵RowID上創(chuàng)建一個過濾索引且SomeValue = 'JeffckyWang',然后返回數(shù)據(jù),如下:

CREATE NONCLUSTERED INDEX idxwhere_noncls_somevalue
ON dbo.TestData(RowID)
WHERE SomeValue = 'JeffckyWang'

下面我們來對比建立過濾索引前后查詢計劃結(jié)果:

USE TSQL2012
GO
SELECT RowID, SomeValue, StartDate 
FROM dbo.TestData WITH(INDEX([idx_pk_rowid]))
WHERE SomeValue = 'JeffckyWang'
SELECT RowID, SomeValue, StartDate 
FROM dbo.TestData WITH(INDEX([idxwhere_noncls_somevalue]))
WHERE SomeValue = 'JeffckyWang'

然后結(jié)合之前所學(xué),移除Key Lookup,對創(chuàng)建的過濾索引進(jìn)行INCLUDE。

CREATE NONCLUSTERED INDEX [idxwhere_noncls_somevalue] ON dbo.TestData(RowID) INCLUDE(SomeValue,StartDate) 
WHERE SomeValue = 'JeffckyWang'

從這里看出,無論是對查詢條件創(chuàng)建過濾索引還是對主鍵創(chuàng)建過濾索引,我們都可以通過結(jié)合之前所學(xué)來提高查詢性能。

我們從開頭就一直在講創(chuàng)建過濾索引,那么創(chuàng)建過濾索引優(yōu)點(diǎn)的條件到底是什么?

(1)只能通過非聚集索引進(jìn)行創(chuàng)建。

(2)如果在視圖上創(chuàng)建過濾索引,此視圖必須是持久化視圖。

(3)不能在全文索引上創(chuàng)建過濾索引。

過濾索引的優(yōu)點(diǎn)

(1)減少索引維護(hù)成本:對于增、刪、改等操作不需要代價沒有那么昂貴,因?yàn)橐粋€過濾索引的重建不需要耗時太多時間。

(2)減少存儲成本:過濾索引的存儲占用空間很小。

(3)更精確的統(tǒng)計:通過在WHERE條件上創(chuàng)建過濾索引比全表統(tǒng)計結(jié)果更加精確。

(4)優(yōu)化查詢性能:通過查詢計劃可以看出其高效性。

講到這里為止,一直陳述的是過濾索引的好處和優(yōu)點(diǎn),已經(jīng)將其捧上天了,其實(shí)其缺點(diǎn)也是顯而易見。

過濾索引缺點(diǎn)

最大的缺點(diǎn)則是查詢條件的限制。其查詢條件僅限于

filter_predicate> ::=  
  conjunct> [ AND conjunct> ] 
conjunct> ::= 
  disjunct> | comparison>  
disjunct> ::= 
    column_name IN (constant ,...n)

過濾條件僅限于AND、|、IN。比較條件僅限于 { IS | IS NOT | = | > | != | > | >= | !> | | = | ! },所以如下利用LIKE不行

CREATE NONCLUSTERED INDEX [idxwhere_noncls_somevalue] ON dbo.TestData(RowID) INCLUDE(SomeValue,StartDate) 
WHERE SomeValue LIKE 'JeffckyWang%'

如下可以

USE AdventureWorks2012
GO
CREATE NONCLUSTERED INDEX idx_SalesOrderDetail_ModifiedDate
ON Sales.SalesOrderDetail(ModifiedDate)
WHERE ModifiedDate >= '2008-01-01' AND ModifiedDate = '2008-01-07'
GO

如下卻不行

CREATE NONCLUSTERED INDEX idx_SalesOrderDetail_ModifiedDate
ON Sales.SalesOrderDetail(ModifiedDate)
WHERE ModifiedDate = GETDATE()
GO

變量對過濾索引影響

上述我們創(chuàng)建過濾索引在查詢條件上直接定義的字符串,如下:

CREATE NONCLUSTERED INDEX idxwhere_SalesOrderDetail_UnitPrice
ON Sales.SalesOrderDetail(UnitPrice)
WHERE UnitPrice > 1000

如果定義的是變量,利用變量來進(jìn)行比較會如何呢?首先我們創(chuàng)建一個過濾索引

CREATE NONCLUSTERED INDEX idx_SalesOrderDetail_ProductID 
ON Sales.SalesOrderDetail (ProductID)
WHERE ProductID = 870

利用變量來和查詢條件比較,強(qiáng)制使用過濾索引(默認(rèn)情況下走聚集索引)

USE AdventureWorks2012
GO
DECLARE @ProductID INT 
SET @ProductID = 870 
SELECT ProductID 
FROM Sales.SalesOrderDetail WITH(INDEX([idx_SalesOrderDetail_ProductID]))
WHERE ProductID = @ProductID

查看查詢執(zhí)行計劃結(jié)果卻出錯了,此時我們需要添加OPTION重新編譯,如下:

USE AdventureWorks2012
GO
DECLARE @ProductID INT 
SET @ProductID = 870 
SELECT ProductID 
FROM Sales.SalesOrderDetail
WHERE ProductID = @ProductID
OPTION(RECOMPILE)

上述利用變量來查詢最后通過OPTION重新編譯在SQL Server 2012中測試好使,至于其他版本未知,參考資料【The Pains of Filtered Indexes】。

總結(jié)

本節(jié)我們學(xué)習(xí)了通過過濾索引來提高查詢性能,同時也給出了其不同的場景以及其使用優(yōu)點(diǎn)和明顯的缺點(diǎn)。簡短的內(nèi)容,深入的理解,我們下節(jié)再會,good night。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,同時也希望多多支持腳本之家!

您可能感興趣的文章:
  • SQL Server 2005通用分頁存儲過程及多表聯(lián)接應(yīng)用
  • SQL設(shè)置SQL Server最大連接數(shù)及查詢語句
  • 解析SQL Server聚焦移除(Bookmark Lookup、RID Lookup、Key Lookup)
  • 淺述SQL Server的聚焦強(qiáng)制索引查詢條件和Columnstore Index
  • 淺析SQL Server的分頁方式 ISNULL與COALESCE性能比較
  • 詳解SQL Server中的數(shù)據(jù)類型
  • 淺析SQL Server的聚焦使用索引和查詢執(zhí)行計劃
  • 淺析SQL Server 聚焦索引對非聚集索引的影響
  • 如何快速刪掉SQL Server登錄時登錄名下拉列表框中的選項(xiàng)
  • 淺談SQL Server交叉聯(lián)接 內(nèi)部聯(lián)接

標(biāo)簽:黃山 池州 新鄉(xiāng) 濱州 大同 文山 來賓 東營

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解SQL Server的聚焦過濾索引》,本文關(guān)鍵詞  詳解,SQL,Server,的,聚焦,過濾,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解SQL Server的聚焦過濾索引》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解SQL Server的聚焦過濾索引的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲精品自拍动漫在线| 国产成人av影院| 国产成人精品一区二区三区四区 | 精品国产91乱码一区二区三区| 国产精品天美传媒| 蜜桃免费网站一区二区三区| 色94色欧美sute亚洲线路一ni| 欧美mv和日韩mv的网站| 亚洲国产精品欧美一二99| 国产99久久精品| 欧美电影免费观看完整版| 亚洲激情综合网| 99精品视频在线免费观看| 欧美mv和日韩mv国产网站| 亚洲一卡二卡三卡四卡无卡久久| 国产91富婆露脸刺激对白 | 欧美群妇大交群中文字幕| 中文字幕一区二区不卡| 国产精品综合一区二区| 精品日韩一区二区三区免费视频| 婷婷中文字幕综合| 欧美日韩激情一区二区| 亚洲国产视频a| 欧美日韩一区三区| 亚洲第一久久影院| 欧美亚洲一区三区| 亚洲线精品一区二区三区八戒| 91在线视频观看| 亚洲乱码一区二区三区在线观看| 成人av网在线| 亚洲男帅同性gay1069| 91视频在线观看免费| 中文字幕日本不卡| 色偷偷88欧美精品久久久| 有码一区二区三区| 欧美色图在线观看| 亚洲国产精品久久艾草纯爱| 欧美精品在线观看一区二区| 日韩精品一级中文字幕精品视频免费观看 | 精品1区2区在线观看| 久草中文综合在线| 久久久久国产一区二区三区四区 | 精品视频在线视频| 亚洲综合av网| 欧美一级欧美一级在线播放| 久久精品国产一区二区三区免费看| 91精品麻豆日日躁夜夜躁| 琪琪久久久久日韩精品| 精品国产乱码久久久久久浪潮| 国内精品视频一区二区三区八戒| 国产婷婷精品av在线| 99久久久免费精品国产一区二区| 一区二区三区波多野结衣在线观看| 欧美图片一区二区三区| 捆绑调教一区二区三区| 久久精品视频在线看| 99久久精品免费看国产| 首页国产欧美久久| 久久久噜噜噜久噜久久综合| 99国产欧美另类久久久精品| 午夜精品久久久久久久久久| 久久久亚洲国产美女国产盗摄| 91丨九色丨黑人外教| 免费在线观看一区| 国产精品久久久久一区二区三区| 91电影在线观看| 国产精品888| 亚洲国产一二三| 国产日产精品一区| 欧美日韩一区二区三区在线| 国产精品一二三四五| 亚洲妇熟xx妇色黄| 中文字幕欧美日韩一区| 欧美日韩国产片| 成人夜色视频网站在线观看| 午夜精品久久久久久久久| 国产精品女上位| 精品乱人伦一区二区三区| 91久久精品国产91性色tv| 蜜臂av日日欢夜夜爽一区| 亚洲美女视频在线观看| 久久久久国产精品麻豆| 欧美放荡的少妇| 91视频91自| 国产成人在线视频网站| 免费观看在线色综合| 一区二区三区丝袜| 亚洲欧美自拍偷拍| 欧美国产欧美综合| 久久只精品国产| 日韩一区二区麻豆国产| 欧洲在线/亚洲| 97久久精品人人做人人爽50路| 精品在线播放午夜| 日本在线播放一区二区三区| 亚洲久草在线视频| 亚洲色图丝袜美腿| 亚洲天堂成人在线观看| 中文字幕欧美激情一区| 久久嫩草精品久久久精品| 日韩一区二区不卡| 欧美日韩一级黄| 欧美日韩精品一二三区| 成人精品高清在线| 韩国欧美国产1区| 精品一区二区三区免费播放| 视频一区视频二区在线观看| 午夜精品久久久久久久蜜桃app | 欧美激情艳妇裸体舞| 久久一夜天堂av一区二区三区 | 欧美三级乱人伦电影| 色婷婷香蕉在线一区二区| 91在线观看视频| 欧美综合在线视频| 欧美日韩激情一区二区三区| 7777女厕盗摄久久久| 欧美久久久久久久久久| 日韩欧美高清一区| 久久综合成人精品亚洲另类欧美| 久久久久99精品国产片| 亚洲国产精品成人综合| 国产精品女同互慰在线看| 亚洲免费av网站| 亚洲成人动漫一区| 麻豆一区二区三| 国产精品12区| 色一情一伦一子一伦一区| 欧洲av一区二区嗯嗯嗯啊| 欧美一卡二卡三卡| 国产欧美日韩另类一区| 一区二区在线观看视频在线观看| 亚洲一区二区视频在线观看| 日本v片在线高清不卡在线观看| 国产最新精品精品你懂的| 丁香六月综合激情| 在线观看一区不卡| 久久综合视频网| 亚洲美女偷拍久久| 日本亚洲免费观看| 成人免费黄色在线| 欧美男男青年gay1069videost| 欧美一区二区三区视频在线| 国产视频视频一区| 亚洲成人动漫在线观看| 国产传媒一区在线| 欧美日韩精品福利| 欧美国产一区在线| 日本免费在线视频不卡一不卡二| 成人手机在线视频| 9191精品国产综合久久久久久| 久久综合999| 亚洲成va人在线观看| 国产成人亚洲精品狼色在线| 欧美另类videos死尸| 欧美极品另类videosde| 日韩成人午夜电影| 一本大道久久a久久综合| 日韩精品综合一本久道在线视频| 亚洲青青青在线视频| 极品销魂美女一区二区三区| 欧美三级视频在线观看| 国产精品午夜久久| 精品制服美女丁香| 欧美精品成人一区二区三区四区| 国产精品久久久久久久久免费樱桃 | 国产精品美女久久久久久久久久久| 图片区日韩欧美亚洲| 99精品偷自拍| 亚洲国产高清不卡| 激情文学综合插| 777奇米四色成人影色区| 亚洲另类色综合网站| 成人动漫在线一区| 精品国产一区二区三区久久久蜜月| 亚洲无人区一区| 99久久精品一区| 国产精品不卡一区| 成人午夜电影小说| 国产日韩欧美精品电影三级在线| 蜜臀久久久99精品久久久久久| 欧美亚洲丝袜传媒另类| 亚洲欧美电影一区二区| 懂色中文一区二区在线播放| 欧美精品一区二区三区四区 | 极品尤物av久久免费看| 制服丝袜一区二区三区| 亚洲成va人在线观看| 欧美日韩一本到| 亚洲成av人片在线| 欧美在线观看视频一区二区| 亚洲免费电影在线| 色婷婷久久一区二区三区麻豆| 中文字幕在线播放不卡一区| 成人中文字幕电影| 国产精品成人网| 91视频精品在这里| 一区二区三区欧美日| 欧美亚洲尤物久久| 日韩精品成人一区二区在线| 日韩亚洲欧美综合|