淺析SQL Server的聚焦使用索引和查詢執(zhí)行計(jì)劃
前言
上一篇《淺析SQL Server 聚焦索引對(duì)非聚集索引的影響》我們講了聚集索引對(duì)非聚集索引的影響,對(duì)數(shù)據(jù)庫(kù)一直在強(qiáng)調(diào)的性能優(yōu)化,所以這一節(jié)我們統(tǒng)籌講講利用索引來(lái)看看查詢執(zhí)行計(jì)劃是怎樣的,簡(jiǎn)短的內(nèi)容,深入的理解。
透過(guò)索引來(lái)看查詢執(zhí)行計(jì)劃
我們首先來(lái)看看第一個(gè)例子
1、默認(rèn)使用索引
USE TSQL2012 GO SELECT orderid FROM Sales.Orders SELECT * FROM Sales.Orders
上述我們看到第2個(gè)查詢的所需要的開(kāi)銷是第1個(gè)查詢開(kāi)銷的3倍,當(dāng)然其中也涉及到第1個(gè)查詢只是返回一列而第2個(gè)查詢返回所有列,這其中也耗費(fèi)一小部分性能。對(duì)于SQL Server查詢而言,它內(nèi)部會(huì)利用索引來(lái)走最短的路徑獲取最優(yōu)的性能。我們能夠注意到即使將orderid作為主鍵,但是返回?cái)?shù)據(jù)并不是采用的主鍵所自動(dòng)生成的聚集索引而是非聚集索引。相信有很多人主觀上覺(jué)得返回主鍵而且查詢沒(méi)有查詢條件應(yīng)該是走主鍵的聚集索引,但是有時(shí)候事實(shí)并非如此,上一篇我們已經(jīng)討論過(guò)這個(gè)問(wèn)題,不再敘述。在第2個(gè)查詢中利用*返回?cái)?shù)據(jù)則是利用主鍵的聚集索引。
2、強(qiáng)制主鍵使用聚集索引
強(qiáng)制使用索引我們利用With(index(索引名稱))來(lái)創(chuàng)建,如下:
USE TSQL2012 GO SELECT orderid FROM Sales.Orders WITH(INDEX(PK_Orders)) SELECT * FROM Sales.Orders WITH(INDEX(PK_Orders))
我們從上可以看出默認(rèn)返回主鍵列時(shí)利用非聚集索引,這里我們強(qiáng)制讓它走聚集索引,而對(duì)于第2個(gè)查詢就不用說(shuō)了,此時(shí)二者的開(kāi)銷是相當(dāng)?shù)摹?/p>
3、強(qiáng)制使用非聚集索引
我們繼續(xù)往下看,對(duì)查詢強(qiáng)制使用非聚集索引查找,如下:
USE TSQL2012 GO SELECT orderid FROM Sales.Orders WITH(INDEX(idx_nc_custid)) SELECT * FROM Sales.Orders WITH(INDEX(idx_nc_custid))
由上可見(jiàn),二者開(kāi)銷區(qū)別之大,對(duì)于使用非聚集索引查詢1返回單列,而查詢2返回所有列的速度快如此之多,通過(guò)以上默認(rèn)使用索引、強(qiáng)制使用聚集索引、強(qiáng)制使用非聚集索引我們知道對(duì)于對(duì)于檢索所有列結(jié)果集使用主鍵的聚集索引是最佳選擇。
總結(jié)
通過(guò)上述演示我們知道即使創(chuàng)建了聚集索引也不會(huì)利用聚集索引檢索結(jié)果,有時(shí)候使用非聚集索引比使用聚集索引會(huì)提供更好的性能,當(dāng)然不能一概而論,二者皆有使用場(chǎng)景。當(dāng)每一次面試時(shí)談到數(shù)據(jù)庫(kù)優(yōu)化時(shí),第一想到的是索引,然后就沒(méi)有下文了,如何使用索引,怎么在不同場(chǎng)景使用不同的索引呢?在任何數(shù)據(jù)庫(kù)中索引一直都是一個(gè)很大的話題且是一個(gè)復(fù)雜的內(nèi)容,復(fù)雜的內(nèi)容皆是由簡(jiǎn)單堆積而成,我們必須如蝸牛般去慢慢研究,抽繭剝絲,最終才會(huì)有一個(gè)好的效果。簡(jiǎn)短的內(nèi)容,深入的理解。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,同時(shí)也希望多多支持腳本之家!
- SQL Server 2005通用分頁(yè)存儲(chǔ)過(guò)程及多表聯(lián)接應(yīng)用
- SQL設(shè)置SQL Server最大連接數(shù)及查詢語(yǔ)句
- 解析SQL Server聚焦移除(Bookmark Lookup、RID Lookup、Key Lookup)
- 詳解SQL Server的聚焦過(guò)濾索引
- 淺述SQL Server的聚焦強(qiáng)制索引查詢條件和Columnstore Index
- 淺析SQL Server的分頁(yè)方式 ISNULL與COALESCE性能比較
- 詳解SQL Server中的數(shù)據(jù)類型
- 淺析SQL Server 聚焦索引對(duì)非聚集索引的影響
- 如何快速刪掉SQL Server登錄時(shí)登錄名下拉列表框中的選項(xiàng)
- 淺談SQL Server交叉聯(lián)接 內(nèi)部聯(lián)接
相關(guān)文章
SQLServer行列互轉(zhuǎn)實(shí)現(xiàn)思路(聚合函數(shù))
這篇文章主要為大家詳細(xì)介紹了SQLServer行列互轉(zhuǎn)實(shí)現(xiàn)思路,使用聚合函數(shù)pivot/unpivot實(shí)現(xiàn)行列互轉(zhuǎn),感興趣的小伙伴們可以參考一下2016-03-03Sql Server臨時(shí)表和游標(biāo)的使用小結(jié)
這篇文章主要介紹了Sql Server臨時(shí)表和游標(biāo)的使用小結(jié),需要的朋友可以參考下2017-05-05SQL Server數(shù)據(jù)庫(kù)的高性能優(yōu)化經(jīng)驗(yàn)總結(jié)
小編以前在做ASP及.NET的時(shí)候經(jīng)常用到SQL SERVER,現(xiàn)在用PHP雖然大多數(shù)時(shí)候用MYSQL,但不泛有些客戶要在原來(lái)SQL的平臺(tái)上升級(jí)或兼容開(kāi)發(fā),值得慶幸的是PHP無(wú)所不能,基本上所有的數(shù)據(jù)庫(kù)它都能連接并支持2011-07-07SQL?Server數(shù)據(jù)庫(kù)數(shù)據(jù)文件的遷移步驟
最近有朋友問(wèn)我如何將一臺(tái)電腦中的SQL Server數(shù)據(jù)庫(kù)數(shù)據(jù)文件遷移到另一臺(tái)電腦上,在這給大家分享SQL?Server數(shù)據(jù)庫(kù)數(shù)據(jù)文件的遷移步驟,感興趣的朋友一起看看吧2024-03-03如何在navicat中利用sql語(yǔ)句建表+添加數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于如何在navicat中利用sql語(yǔ)句建表+添加數(shù)據(jù)的相關(guān)資料,Navicat是一套快速,專為簡(jiǎn)化數(shù)據(jù)庫(kù)的管理及降低系統(tǒng)管理成本而設(shè),它的設(shè)計(jì)符合數(shù)據(jù)庫(kù)管理員、開(kāi)發(fā)人員及中小企業(yè)的需要,需要的朋友可以參考下2023-10-10獲取SqlServer存儲(chǔ)過(guò)程定義的三種方法
這篇文章主要介紹了獲取SqlServer存儲(chǔ)過(guò)程定義的三種方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07SQL學(xué)習(xí)筆記四 聚合函數(shù)、排序方法
SQL學(xué)習(xí)筆記四 聚合函數(shù)、排序方法,在數(shù)據(jù)調(diào)用中非常實(shí)用。2011-08-08淺述SQL Server的聚焦強(qiáng)制索引查詢條件和Columnstore Index
本文主要講了強(qiáng)制使用索引條件來(lái)進(jìn)行查詢,當(dāng)對(duì)于使用默認(rèn)創(chuàng)建索引進(jìn)行查詢計(jì)劃時(shí)覺(jué)得不是最優(yōu)解,可以嘗試使用強(qiáng)制索引來(lái)進(jìn)行對(duì)比找出更好得解決方案。簡(jiǎn)短的內(nèi)容,深入的理解.有興趣的朋友可以看下2016-12-12SQLServer日志清空語(yǔ)句(sql2000,sql2005,sql2008)
時(shí)候當(dāng)系統(tǒng)運(yùn)行時(shí)間比較長(zhǎng)的時(shí)候,我們把備份的數(shù)據(jù)庫(kù)還原的時(shí)候發(fā)現(xiàn),數(shù)據(jù)庫(kù)中數(shù)據(jù)文件和日志文件變的好大,特別是日志文件?,F(xiàn)在給大家介紹如何清理SQLServer數(shù)據(jù)庫(kù)日志2013-05-05