[英]Why isn't SQL Server using my clustered index and doing a non-clustered index scan?
我有一個有幾列的patient
表,列ID
上有一個聚簇索引, birth
列上有一個非聚簇索引。
create clustered index CI_patient on dbo.patient (ID)
create nonclustered index NCI_patient on dbo.patient (birth)
這是我的查詢:
select * from patient
select ID from patient
select birth from patient
看執行計划,第一個查詢是'clustered index scan'(可以理解,因為表是聚表),第三個是'index scan nonclustered'(也可以理解,因為該列有非聚簇索引)
我的問題是為什么第二個是“索引掃描非聚集”? 這個列假設有一個聚集索引,從這個意義上說,應該是聚集索引掃描嗎? 對此有什么想法嗎?
基本上,您的第二個查詢想要從表中獲取所有ID
值(沒有WHERE
子句或任何東西)。
SQL 服務器可以通過兩種方式做到這一點:
ID
可以工作,但它會一個接一個地加載整個表ID
值 - 比進行全表掃描時更快(聚集索引掃描)SQL 服務器中基於成本的優化器只是選擇更有效的途徑來獲得您在第二個查詢中提出的問題的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.