淺析SQL Server的聚焦運用索引和查詢執行方案。本站提示廣大學習愛好者:(淺析SQL Server的聚焦運用索引和查詢執行方案)文章只能為提供參考,不一定能成為您想要的結果。以下是淺析SQL Server的聚焦運用索引和查詢執行方案正文
前言
上一篇《淺析SQL Server 聚焦索引對非聚集索引的影響》我們講了聚集索引對非聚集索引的影響,對數據庫不斷在強調的功能優化,所以這一節我們統籌講講應用索引來看看查詢執行方案是怎樣的,冗長的內容,深化的了解。
透過索引來看查詢執行方案
我們首先來看看第一個例子
1、默許運用索引
USE TSQL2012 GO SELECT orderid FROM Sales.Orders SELECT * FROM Sales.Orders
上述我們看到第2個查詢的所需求的開支是第1個查詢開支的3倍,當然其中也觸及到第1個查詢只是前往一列而第2個查詢前往一切列,這其中也消耗一小局部功能。關於SQL Server查詢而言,它外部會應用索引來走最短的途徑獲取最優的功能。我們可以留意到即便將orderid作為主鍵,但是前往數據並不是采用的主鍵所自動生成的聚集索引而是非聚集索引。置信有很多人客觀上覺得前往主鍵而且查詢沒有查詢條件應該是走主鍵的聚集索引,但是有時分現實並非如此,上一篇我們曾經討論過這個問題,不再敘說。在第2個查詢中應用*前往數據則是應用主鍵的聚集索引。
2、強迫主鍵運用聚集索引
強迫運用索引我們應用With(index(索引稱號))來創立,如下:
USE TSQL2012 GO SELECT orderid FROM Sales.Orders WITH(INDEX(PK_Orders)) SELECT * FROM Sales.Orders WITH(INDEX(PK_Orders))
我們從上可以看出默許前往主鍵列時應用非聚集索引,這裡我們強迫讓它走聚集索引,而關於第2個查詢就不必說了,此時二者的開支是相當的。
3、強迫運用非聚集索引
我們持續往下看,對查詢強迫運用非聚集索引查找,如下:
USE TSQL2012 GO SELECT orderid FROM Sales.Orders WITH(INDEX(idx_nc_custid)) SELECT * FROM Sales.Orders WITH(INDEX(idx_nc_custid))
由上可見,二者開支區別之大,關於運用非聚集索引查詢1前往單列,而查詢2前往一切列的速度快如此之多,經過以上默許運用索引、強迫運用聚集索引、強迫運用非聚集索引我們知道關於關於檢索一切列後果集運用主鍵的聚集索引是最佳選擇。
總結
經過上述演示我們知道即便創立了聚集索引也不會應用聚集索引檢索後果,有時分運用非聚集索引比運用聚集索引會提供更好的功能,當然不能混為一談,二者皆有運用場景。當每一次面試時談到數據庫優化時,第一想到的是索引,然後就沒有下文了,如何運用索引,怎樣在不同場景運用不同的索引呢?在任何數據庫中索引不斷都是一個很大的話題且是一個復雜的內容,復雜的內容皆是由復雜堆積而成,我們必需如蝸牛般去漸漸研討,抽繭剝絲,最終才會有一個好的效果。冗長的內容,深化的了解。
以上就是本文的全部內容,希望本文的內容對大家的學習或許任務能帶來一定的協助,假如有疑問大家可以留言交流,同時也希望多多支持!