前言
上一篇我們講了聚集索引對(duì)非聚集索引的影響,對(duì)數(shù)據(jù)庫一直在強(qiáng)調(diào)的性能優(yōu)化,所以這一節(jié)我們統(tǒng)籌講講利用索引來看看查詢執(zhí)行計(jì)劃是怎樣的,簡(jiǎn)短的內(nèi)容,深入的理解。
透過索引來看查詢執(zhí)行計(jì)劃
我們首先來看看第一個(gè)例子
1、默認(rèn)使用索引
USE TSQL2012
GO
SELECT orderid
FROM Sales.Orders
SELECT *
FROM Sales.Orders
上述我們看到第2個(gè)查詢的所需要的開銷是第1個(gè)查詢開銷的3倍,當(dāng)然其中也涉及到第1個(gè)查詢只是返回一列而第2個(gè)查詢返回所有列,這其中也耗費(fèi)一小部分性能。對(duì)于SQL Server查詢而言,它內(nèi)部會(huì)利用索引來走最短的路徑獲取最優(yōu)的性能。我們能夠注意到即使將orderid作為主鍵,但是返回?cái)?shù)據(jù)并不是采用的主鍵所自動(dòng)生成的聚集索引而是非聚集索引。相信有很多人主觀上覺得返回主鍵而且查詢沒有查詢條件應(yīng)該是走主鍵的聚集索引,但是有時(shí)候事實(shí)并非如此,上一篇我們已經(jīng)討論過這個(gè)問題,不再敘述。在第2個(gè)查詢中利用*返回?cái)?shù)據(jù)則是利用主鍵的聚集索引。
2、強(qiáng)制主鍵使用聚集索引
強(qiáng)制使用索引我們利用With(index(索引名稱))來創(chuàng)建,如下:
USE TSQL2012 GO SELECT orderid FROM Sales.Orders WITH(INDEX(PK_Orders)) SELECT *