簡體   English   中英

SQL Server 執行計划中的“Clustered Index Scan (Clustered)”是什么意思?

[英]What "Clustered Index Scan (Clustered)" means on SQL Server execution plan?

我有一個查詢無法執行,並顯示“由於文件組 'DEFAULT' 中的磁盤空間不足,無法為數據庫 'TEMPDB' 分配新頁面”。

在排除故障的過程中,我正在檢查執行計划。 有兩個標記為“聚集索引掃描(聚集)”的昂貴步驟。 我很難弄清楚這意味着什么?

我很感激對“聚集索引掃描(聚集)”的任何解釋或有關在哪里可以找到相關文檔的建議?

我很感激對“聚集索引掃描(聚集)”的任何解釋

我將嘗試以最簡單的方式,為了更好地理解您需要了解索引查找和掃描。

所以讓我們建立表格

use tempdb GO


create table scanseek  (id  int , name varchar(50) default ('some random names')  )

create clustered index IX_ID_scanseek on scanseek(ID)


declare @i int
SET @i = 0
while (@i <5000)
begin 
insert into scanseek
select @i, 'Name' + convert( varchar(5) ,@i)
set @i =@i+1
END

索引查找是 SQL Server 使用索引的b 樹結構直接查找匹配記錄的地方

在此處輸入圖片說明

您可以使用下面的 DMV 檢查您的表根節點和葉節點

-- check index level 
SELECT 
index_level
,record_count
,page_count

,avg_record_size_in_bytes
FROM sys.dm_db_index_physical_stats(DB_ID('tempdb'),OBJECT_ID('scanseek'),NULL,NULL,'DETAILED')
GO

現在這里我們在列“ID”上有聚集索引

讓我們尋找一些直接匹配的記錄

select * from scanseek where id =340

並查看執行計划

在此處輸入圖片說明

您已經直接在查詢中請求了行,這就是為什么您獲得聚集索引 SEEK 的原因。

聚集索引掃描:當Sql server從上到下讀取聚集索引中的Row(s)時。 例如在非關鍵列中搜索數據。 在我們的表中 NAME 是非鍵列,所以如果我們在 name 列中搜索一些數據,我們將看到clustered index scan因為所有行都在聚集索引葉級別。

例子

select * from scanseek where name = 'Name340'

在此處輸入圖片說明

請注意:我做了這個簡短的回答只是為了更好地理解,如果您有任何問題或建議,請在下面發表評論。

擴展 Gordon 在評論中的回答,聚簇索引掃描是掃描其中一個表索引以查找您正在執行 where 子句過濾器的值,或者連接到查詢計划中的下一個表。

表可以有多個索引(一個聚集索引和許多非聚集索引),SQL Server 將根據正在執行的過濾器或聯接搜索適當的索引。

MSDN 上對聚集索引進行了很好的解釋。 聚集索引和非聚集索引的主要區別在於聚集索引定義了行在磁盤上的存儲方式。

如果您的聚集索引由於記錄數量而導致搜索成本很高,您可能需要在表上為您經常搜索的字段添加非聚集索引,例如用於過濾記錄范圍的日期字段。

聚集索引是其中索引的終端(葉)節點是實際數據頁本身的索引。 每個表只能有一個聚集索引,因為它指定了記錄在數據頁內的排列方式。 它通常(並且有一些例外)被認為是性能最高的索引類型(主要是因為在您到達實際數據記錄之前少了一個間接級別)。

“聚集索引掃描”意味着 SQL 引擎正在遍歷聚集索引以搜索特定值(或一組值)。 它是定位記錄的最有效方法之一(被 SQL 引擎尋找匹配單個選定值的“聚集索引查找”擊敗)。

錯誤消息與查詢計划完全無關。 這只是意味着您在 TempDB 上的空間不足。

由於聚集索引掃描,我一直遇到性能和超時問題。 然而,另一個看似相同的數據庫沒有同樣的問題。 結果發現數據庫上的 COMPATIBILITY_LEVEL 標志不同...... COMPATIBILITY_LEVEL 100 的版本正在使用掃描,級別 130 的數據庫不是。 性能差異巨大(同一查詢從超過 1 分鍾到不到 1 秒)

ALTER DATABASE [mydb] SET COMPATIBILITY_LEVEL = 130

如果您將鼠標懸停在查詢計划中的步驟上,SSMS 會顯示該步驟的功能描述。 這將使您對“聚集索引掃描(聚集)”和所有其他涉及的步驟有一個基本的了解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM