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

首頁 > 數據庫 > SQL Server > 正文

淺析SQL Server的聚焦使用索引和查詢執行計劃

2024-08-31 01:04:23
字體:
來源:轉載
供稿:網友

前言

上一篇《淺析SQL Server 聚焦索引對非聚集索引的影響》我們講了聚集索引對非聚集索引的影響,對數據庫一直在強調的性能優化,所以這一節我們統籌講講利用索引來看看查詢執行計劃是怎樣的,簡短的內容,深入的理解。

透過索引來看查詢執行計劃

我們首先來看看第一個例子

1、默認使用索引

USE TSQL2012GOSELECT orderid FROM Sales.OrdersSELECT * FROM Sales.Orders

sqlserver聚焦索引,sqlserver執行計劃

上述我們看到第2個查詢的所需要的開銷是第1個查詢開銷的3倍,當然其中也涉及到第1個查詢只是返回一列而第2個查詢返回所有列,這其中也耗費一小部分性能。對于SQL Server查詢而言,它內部會利用索引來走最短的路徑獲取最優的性能。我們能夠注意到即使將orderid作為主鍵,但是返回數據并不是采用的主鍵所自動生成的聚集索引而是非聚集索引。相信有很多人主觀上覺得返回主鍵而且查詢沒有查詢條件應該是走主鍵的聚集索引,但是有時候事實并非如此,上一篇我們已經討論過這個問題,不再敘述。在第2個查詢中利用*返回數據則是利用主鍵的聚集索引。

2、強制主鍵使用聚集索引

強制使用索引我們利用With(index(索引名稱))來創建,如下:

USE TSQL2012GOSELECT orderid FROM Sales.Orders WITH(INDEX(PK_Orders))SELECT * FROM Sales.Orders WITH(INDEX(PK_Orders))

sqlserver聚焦索引,sqlserver執行計劃

我們從上可以看出默認返回主鍵列時利用非聚集索引,這里我們強制讓它走聚集索引,而對于第2個查詢就不用說了,此時二者的開銷是相當的。

3、強制使用非聚集索引

我們繼續往下看,對查詢強制使用非聚集索引查找,如下:

USE TSQL2012GOSELECT orderid FROM Sales.Orders WITH(INDEX(idx_nc_custid))SELECT * FROM Sales.Orders WITH(INDEX(idx_nc_custid))

sqlserver聚焦索引,sqlserver執行計劃

由上可見,二者開銷區別之大,對于使用非聚集索引查詢1返回單列,而查詢2返回所有列的速度快如此之多,通過以上默認使用索引、強制使用聚集索引、強制使用非聚集索引我們知道對于對于檢索所有列結果集使用主鍵的聚集索引是最佳選擇。

總結

通過上述演示我們知道即使創建了聚集索引也不會利用聚集索引檢索結果,有時候使用非聚集索引比使用聚集索引會提供更好的性能,當然不能一概而論,二者皆有使用場景。當每一次面試時談到數據庫優化時,第一想到的是索引,然后就沒有下文了,如何使用索引,怎么在不同場景使用不同的索引呢?在任何數據庫中索引一直都是一個很大的話題且是一個復雜的內容,復雜的內容皆是由簡單堆積而成,我們必須如蝸牛般去慢慢研究,抽繭剝絲,最終才會有一個好的效果。簡短的內容,深入的理解。

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


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成都市| 西昌市| 田林县| 天长市| 梅州市| 辉县市| 巴林左旗| 攀枝花市| 华阴市| 沾化县| 涞源县| 宁蒗| 大渡口区| 当涂县| 深圳市| 隆化县| 惠来县| 广西| 天全县| 读书| 龙胜| 湄潭县| 辰溪县| 颍上县| 三河市| 嘉峪关市| 福泉市| 灌南县| 泾源县| 涪陵区| 齐齐哈尔市| 常德市| 通辽市| 宁乡县| 日土县| 博乐市| 闵行区| 哈尔滨市| 定远县| 南开区| 焉耆|