回答

收藏

SQL Server群集索引扫描(群集)是什么意思?

技术问答 技术问答 667 人阅读 | 0 人回复 | 2023-09-14

我有一个查询无法执行,因为因为文件组’DEFAULT’数据库中磁盘空间不足’TEMPDB’分配新页面”。+ O* \2 c& j7 ?& x5 ^. T
在排除故障的过程中,我正在检查执行计划。有两个昂贵的步骤标记为聚集索引扫描(聚集)。我很难找出这意味着什么?
% [0 Q7 K8 {# ^0 @( P' M我非常感谢群组索引扫描(群组)的任何解释或在哪里可以找到相关文件的建议。0 ]; q0 D/ h+ k
                                                               
2 F! t/ W6 z) H4 ~/ K    解决方案:                                                               
" Y3 q5 [1 k2 l* t+ [7 U  f; v                                                                我将非常感谢对群组索引扫描(群组)的任何解释。, A2 V0 r8 V- I2 {1 Z; W6 J
为了更好地理解你需要同时理解索引搜索和扫描,我将尝试以最简单的方式进行介绍。
# d/ E$ J- h5 n" V5 S所以让我们建立一个表格
9 G* b# f6 }! Puse tempdb GOcreate table scanseek  (id  int ,name varchar(50) default ('some random names')  )create clustered index IX_ID_scanseek on scanseek(ID)declare @i intSET @i = 0while (@i 索引查找是SQL Server使用索引的b树结构直接找到匹配记录的地方* J1 i; r) w. r' L) S; {6 f
2 L+ F4 f# o- g
您可以使用以下内容DMV根节点和叶节点检查表
+ ^1 B4 r) x8 u' r, w-- check index level SELECT index_level,record_count,page_count,avg_record_size_in_bytesFROM sys.dm_db_index_physical_stats(DB_ID('tempdb'),OBJECT_ID('scanseek'),NULL,NULL,'DETAILED')GO现在,我们在 ID在列表中建立了聚集索引
* p; \, k5 I( Y1 C0 J( N: _7 ?让我们找到一些直接匹配的记录
& o, @: ~8 W( r4 Dselect * from scanseek where id =340看看执行计划1 J; K3 E7 v2 O+ {3 Q6 u+ g

8 U( i4 ~* B- E, t! {! Q" {' U您直接在查询中要求行,这就是为什么获得聚簇索引SEEK的原因。2 a) w/ I, e8 ~0 ]0 G
收集索引扫描:    当Sql5 k( H% R2 x  M' U; @( h% x, E5 i
Server从收集索引的顶部到底部读取行。例如,在非关键列中搜索数据。在我们的表中NAME是非关键列,所以如果我们在name在列中搜索一些数据,就会看到,clusteredindex scan因为所有的行都在聚簇索引叶的级别。
' n! ~& Z9 a3 ]# I例子; u) ^4 |9 h8 Y1 X
select * from scanseek where name = 'Name340'' E$ `3 r& `% ~9 p
: l  Y" {% W* w$ l0 _: F' l+ U
请注意:我把这个答案简写为只是为了更好的理解。如果您有任何问题或建议,请在下面发表评论。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则