非聚集索引和聚集索引的區別
不在不會詳細說明非聚集索引和聚集索引的結構有什么不一樣,因為這種東西網上已經說的很多了。
一個表一旦建立了聚集索引,那么那張表就是一張被b樹重新組織過的表。
而沒聚集索引表就是一個堆表。
什么是b樹,什么是堆表就不解釋了。
小弟對,非聚集索引狀況下 和 聚集索引狀況下的 常量綁定和變量綁定做了測試。
會發在這邊是因為聚集索引的變量綁定的執行計劃,和非聚集索引的變量綁定的執行計劃不一樣。
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
執行計劃結果:
`RHXJN)36D`R.jpg)
結果顯而易見了,變量綁定對非聚集索引和聚集索引執行計劃不一樣。
有人看了執行計劃就會說,orderdate 沒有走索引很正常啊,可能是選擇度不夠。但是用常量綁定的時候就用了索引查詢。
所以這種解釋是不通的。
聚集索引下,使用了索引查找,非聚集索引下,使用了表掃描。
原因何在,本人也不知道。這個就要問問寫優化器的人,也同時希望知道內情的人透露一下。
和大家分享。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
