非聚集索引和聚集索引的區(qū)別
不在不會詳細說明非聚集索引和聚集索引的結構有什么不一樣,因為這種東西網(wǎng)上已經(jīng)說的很多了。
一個表一旦建立了聚集索引,那么那張表就是一張被b樹重新組織過的表。
而沒聚集索引表就是一個堆表。
什么是b樹,什么是堆表就不解釋了。
小弟對,非聚集索引狀況下 和 聚集索引狀況下的 常量綁定和變量綁定做了測試。
會發(fā)在這邊是因為聚集索引的變量綁定的執(zhí)行計劃,和非聚集索引的變量綁定的執(zhí)行計劃不一樣。
use
northwind
CREATE
INDEX
idx_orderdate_orders
ON
dbo.Orders(OrderDate)
DBCC
FREEPROCCACHE
SELECT
*
FROM
Orders
WHERE
OrderDate
>
'
19990101
'
DBCC
FREEPROCCACHE
DECLARE
@fromdate_copy
datetime
SELECT
@fromdate_copy
=
'
19990101
'
SELECT
*
FROM
Orders
WHERE
OrderDate
>
@fromdate_copy
DROP
INDEX
idx_orderdate_orders
ON
dbo.Orders
go
CREATE
CLUSTERED
INDEX
cidx_orderdate_orders
ON
dbo.Orders(OrderDate)
DBCC
FREEPROCCACHE
SELECT
*
FROM
Orders
WHERE
OrderDate
>
'
19990101
'
DBCC
FREEPROCCACHE
DECLARE
@fromdate_copy
datetime
set
@fromdate_copy
=
'
19990101
'
SELECT
*
FROM
Orders
WHERE
OrderDate
>
@fromdate_copy
DROP
INDEX
cidx_orderdate_orders
ON
dbo.Orders
執(zhí)行計劃結果:
結果顯而易見了,變量綁定對非聚集索引和聚集索引執(zhí)行計劃不一樣。
有人看了執(zhí)行計劃就會說,orderdate 沒有走索引很正常啊,可能是選擇度不夠。但是用常量綁定的時候就用了索引查詢。
所以這種解釋是不通的。
聚集索引下,使用了索引查找,非聚集索引下,使用了表掃描。
原因何在,本人也不知道。這個就要問問寫優(yōu)化器的人,也同時希望知道內情的人透露一下。
和大家分享。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

