SQL Server 聚集索引和非聚集索引的區別

2021-09-09 02:49:39 字數 1560 閱讀 7431

非聚集索引和聚集索引的區別

不在不會詳細說明非聚集索引和聚集索引的結構有什麼不一樣,因為這種東西網上已經說的很多了。

乙個表一旦建立了聚集索引,那麼那張表就是一張被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

gocreate

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

執行計畫結果:

結果顯而易見了,變數繫結對非聚集索引和聚集索引執行計畫不一樣。

有人看了執行計畫就會說,orderdate 沒有走索引很正常啊,可能是選擇度不夠。但是用常量繫結的時候就用了索引查詢。

所以這種解釋是不通的。

聚集索引下,使用了索引查詢,非聚集索引下,使用了表掃瞄。

原因何在,本人也不知道。這個就要問問寫優化器的人,也同時希望知道內情的人透露一下。

和大家分享。

sqlserver 聚集索引 非聚集索引

聚集索引是一種對磁碟上實際資料重新組織以按指定的一列或者多列值排序。像我們用到的漢語字典,就是乙個聚集索引。換句話說就是聚集索引會改變資料庫表中資料的存放順序。非聚集索引不會重新組織表中的資料,而是對每一行儲存索引列值並用乙個指標指向資料所在的頁面。乙個值指向多行等於該值的資料 sqlserver預...

SQL Server 聚集索引和非聚集索引的區別

聚集索引 物理儲存按照索引排序 非聚集索引 物理儲存不按照索引排序 優勢與缺點 聚集索引 插入資料時速度要慢 時間花費在 物理儲存的排序 上,也就是首先要找到位置然後插入 查詢資料比非聚集資料的速度快 漢語字典的正文本身就是乙個聚集索引。比如,我們要查 安 字,就會很自然地翻開字典的前幾頁,因為 安...

SQL SERVER 聚集索引 非聚集索引 區別

一 理解索引的結構 索引在資料庫中的作用類似於目錄在書籍中的作用,用來提高查詢資訊的速度。使用索引查詢資料,無需對整表進行掃瞄,可以快速找到所需資料。微軟的sql server提供了兩種索引 聚集索引 clustered index,也稱聚類索引 簇集索引 和非聚集索引 nonclustered i...