gpt4 book ai didi

sql - "Clustered Index Scan (Clustered)"在 SQL Server 执行计划中意味着什么?

转载 作者:行者123 更新时间:2023-12-01 23:06:38 27 4
gpt4 key购买 nike

我有一个查询无法执行,并显示“由于文件组“DEFAULT”中磁盘空间不足,无法为数据库“TEMPDB”分配新页面”。

在排除故障的过程中,我正在检查执行计划。有两个标记为“聚集索引扫描(聚集)”的昂贵步骤。我很难理解这意味着什么?

我希望对“聚集索引扫描(聚集)”有任何解释或有关在哪里可以找到相关文档的建议?

最佳答案

I would appreciate any explanations to "Clustered Index Scan (Clustered)"

我会尝试以最简单的方式表达,为了更好地理解,您需要了解索引查找和扫描。

让我们构建表格

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-tree 的地方。直接查找匹配记录的索引结构

enter image description here

您可以使用下面的 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

并查看执行计划

enter image description here

您直接在查询中请求行,这就是您获得聚集索引 SEEK 的原因。

聚集索引扫描:当Sql服务器从聚集索引中从上到下读取行时。例如在非关键列中搜索数据。在我们的表中,NAME 是非键列,因此如果我们在 name 列中搜索一些数据,我们将看到聚集索引扫描,因为所有行都在聚集索引叶级别中。

示例

select * from scanseek where name = 'Name340'

enter image description here

请注意:我简短地回答了这个问题,只是为了更好地理解,如果您有任何问题或建议,请在下面评论。

关于sql - "Clustered Index Scan (Clustered)"在 SQL Server 执行计划中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31949355/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com