国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

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

2024-08-31 01:04:24
字體:
供稿:網(wǎng)友

前言

本節(jié)我們再來穿插講講索引知識,后續(xù)再講數(shù)據(jù)類型中的日期類型,簡短的內(nèi)容,深入的理解。

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

前面我們也講了一點(diǎn)強(qiáng)制索引查詢的知識,本節(jié)我們再來完整的講述下

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

USE TSQL2012GOSELECT * FROM Sales.Orders

sqlserver,聚焦索引,Columnstore,Index

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

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

USE TSQL2012GOSELECT custid FROM Sales.Orders WITH(INDEX(idx_nc_custid))

sqlserver,聚焦索引,Columnstore,Index

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

sqlserver,聚焦索引,Columnstore,Index

USE TSQL2012GOSELECT custid FROM Sales.Orders WITH (INDEX(idx_nc_custid))  INNER JOIN Sales.OrderDetails WITH (INDEX(PK_OrderDetails))   ON Sales.OrderDetails.orderid = Sales.Orders.orderidGO

(4)SQL Server使用OPTION

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

USE TSQL2012GOSELECT 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

sqlserver,聚焦索引,Columnstore,Index

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

Columnstore Index

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

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

sqlserver,聚焦索引,Columnstore,Index

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

總結(jié)

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

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


注:相關(guān)教程知識閱讀請移步到MSSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永福县| 贡嘎县| 陆川县| 广宁县| 郴州市| 柏乡县| 遂溪县| 道孚县| 成安县| 康平县| 科技| 棋牌| 蒲城县| 巴青县| 万盛区| 吕梁市| 通化县| 五大连池市| 文昌市| 江阴市| 麦盖提县| 牙克石市| 汪清县| 中阳县| 石城县| 新巴尔虎左旗| 竹北市| 囊谦县| 合川市| 乌拉特前旗| 辉南县| 昌邑市| 连山| 浦城县| 平舆县| 湾仔区| 天峨县| 泾川县| 武安市| 峨山| 师宗县|