主頁(yè) > 知識(shí)庫(kù) > 淺述SQL Server的聚焦強(qiáng)制索引查詢條件和Columnstore Index

淺述SQL Server的聚焦強(qiáng)制索引查詢條件和Columnstore Index

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

前言

本節(jié)我們?cè)賮泶┎逯v講索引知識(shí),后續(xù)再講數(shù)據(jù)類型中的日期類型,簡(jiǎn)短的內(nèi)容,深入的理解。

強(qiáng)制索引查詢條件

前面我們也講了一點(diǎn)強(qiáng)制索引查詢的知識(shí),本節(jié)我們?cè)賮硗暾闹v述下

(1)SQL Server使用默認(rèn)索引

USE TSQL2012
GO
SELECT * 
FROM Sales.Orders

上述就不用我再啰嗦了,使用默認(rèn)主鍵創(chuàng)建的聚集索引來執(zhí)行查詢執(zhí)行計(jì)劃。

(2)SQL Server使用強(qiáng)制索引

USE TSQL2012
GO
SELECT custid 
FROM Sales.Orders WITH(INDEX(idx_nc_custid))

(3)SQL Server使用內(nèi)聯(lián)查詢條件

USE TSQL2012
GO
SELECT custid 
FROM Sales.Orders WITH (INDEX(idx_nc_custid))
  INNER JOIN Sales.OrderDetails WITH (INDEX(PK_OrderDetails)) 
  ON Sales.OrderDetails.orderid = Sales.Orders.orderid
GO

(4)SQL Server使用OPTION

上述我們第三個(gè)使用內(nèi)聯(lián)查詢是比較好的,同時(shí)我們可以在表連接中末尾使用OPTION來強(qiáng)制使用索引,因?yàn)樯婕暗奖磉B接,我們會(huì)用到另外一個(gè)函數(shù)Hints。該Hints用在Join Hints、Query Hints、Table Hints。如果我們指定用Hints很明顯將覆蓋查詢計(jì)劃,因?yàn)閷QL Server默認(rèn)在查詢上會(huì)使用最優(yōu)查詢,此時(shí)通過Hints將可能會(huì)覆蓋最優(yōu)查詢,所以一般不推薦使用,只對(duì)于明確知道這樣做會(huì)比默認(rèn)查詢計(jì)劃會(huì)更好的有豐富經(jīng)驗(yàn)的SQL Server使用者可能會(huì)是好的解決方案。但是對(duì)于OPTION我們可以使用,OPTION才SQL Server 2008+上才有,上述第三個(gè)強(qiáng)制使用內(nèi)聯(lián)查詢提示可以通過OPTION結(jié)合Hints來完成。

USE TSQL2012
GO
SELECT custid 
FROM Sales.Orders AS SO
  INNER JOIN Sales.OrderDetails AS SOD
  ON SOD.orderid = SO.orderid
  OPTION (TABLE HINT(SO,INDEX(idx_nc_custid)),TABLE HINT(SOD, INDEX(PK_OrderDetails)))
GO

上述不推薦使用,除非你明確這樣做比默認(rèn)使用最優(yōu)執(zhí)行查詢計(jì)劃更好。

Columnstore Index

列存儲(chǔ)索引出現(xiàn)在SQL Server 2012+上,我們本節(jié)簡(jiǎn)單說說這個(gè)內(nèi)容,對(duì)于大數(shù)據(jù)方面合理使用列存儲(chǔ)索引能夠提高查詢性能,但是通過查找大量資料發(fā)現(xiàn)在SQL Server 2012中使用列存儲(chǔ)索引有諸多限制并且還會(huì)出現(xiàn)許多問題,而在SQL Server 2014+上這樣的問題得到了很大的改善,所以不建議在SQL Server 2012中使用列存儲(chǔ)索引,要使用可以在 SQL Server 2014+上使用。

當(dāng)我們?cè)赟QL Server 2012中創(chuàng)建索引會(huì)提示有Columnstore Index和NONCLUSTERED COLUMNSTORE INDEX。在數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù)分為兩種,一種是行存儲(chǔ),另外一種則是列存儲(chǔ),行存儲(chǔ)是在頁(yè)上存儲(chǔ)所有行數(shù)據(jù),而列存儲(chǔ)則是在相同頁(yè)上存儲(chǔ)一列所有數(shù)據(jù),所以利用列存儲(chǔ)查找數(shù)據(jù)會(huì)更加快而不是查找整行上的所有數(shù)據(jù),當(dāng)然這也就意味著查找速度的增加而導(dǎo)致的則是硬件驅(qū)動(dòng)配置需要有更高的要求,列存儲(chǔ)中的索引會(huì)進(jìn)行壓縮,所以要使用列存儲(chǔ)需要更大的內(nèi)存。列存儲(chǔ)索引存儲(chǔ)每一列數(shù)據(jù)在每一組單獨(dú)的磁盤頁(yè)中,而不是在每頁(yè)上存儲(chǔ)多行,它和行存儲(chǔ)存儲(chǔ)數(shù)據(jù)區(qū)別在于如下圖

這里關(guān)于例子就不再給出,算是做一個(gè)基本了解吧。

總結(jié)

本節(jié)我們主要講了強(qiáng)制使用索引條件來進(jìn)行查詢,當(dāng)對(duì)于使用默認(rèn)創(chuàng)建索引進(jìn)行查詢計(jì)劃時(shí)覺得不是最優(yōu)解,可以嘗試使用強(qiáng)制索引來進(jìn)行對(duì)比找出更好得解決方案。簡(jiǎn)短的內(nèi)容,深入的理解,我們下節(jié)再會(huì)。

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

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺述SQL Server的聚焦強(qiáng)制索引查詢條件和Columnstore Index》,本文關(guān)鍵詞  淺述,SQL,Server,的,聚焦,強(qiáng)制,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺述SQL Server的聚焦強(qiáng)制索引查詢條件和Columnstore Index》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于淺述SQL Server的聚焦強(qiáng)制索引查詢條件和Columnstore Index的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章