回答

收藏

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

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

我有一个查询无法执行,因为因为文件组’DEFAULT’数据库中磁盘空间不足’TEMPDB’分配新页面”。2 e2 ~5 X/ d5 q. g
在排除故障的过程中,我正在检查执行计划。有两个昂贵的步骤标记为聚集索引扫描(聚集)。我很难找出这意味着什么?$ H+ c2 ], s9 b! C+ H3 e
我非常感谢群组索引扫描(群组)的任何解释或在哪里可以找到相关文件的建议。( r/ {! v# K- Y8 l
                                                                / t0 i& e/ l( M) l4 [
    解决方案:                                                                5 ~- n$ h7 C0 j9 w7 g
                                                                我将非常感谢对群组索引扫描(群组)的任何解释。) x2 Y) i7 T( t( H. L
为了更好地理解你需要同时理解索引搜索和扫描,我将尝试以最简单的方式进行介绍。
4 J3 @, c& k0 Q& T" h所以让我们建立一个表格& H: G; D# G8 }- Q3 z
use 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树结构直接找到匹配记录的地方
+ x& U2 t2 I( k$ `
& Y% x- k6 c7 ]) k* B% x7 G' M您可以使用以下内容DMV根节点和叶节点检查表8 p- p  ^5 g0 k+ P; c% I$ F8 s: A
-- 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在列表中建立了聚集索引5 h9 E5 x+ a, R; ~% E5 |- G2 t, w
让我们找到一些直接匹配的记录  o0 }& l% u; ^, W# G6 ~$ T
select * from scanseek where id =340看看执行计划
: h  }# [0 \& _( c! q+ s7 Z* v& L. {0 N- ]
您直接在查询中要求行,这就是为什么获得聚簇索引SEEK的原因。0 Q+ H5 j' }8 K) }' ?5 F
收集索引扫描:    当Sql
: Q, d. D9 _0 yServer从收集索引的顶部到底部读取行。例如,在非关键列中搜索数据。在我们的表中NAME是非关键列,所以如果我们在name在列中搜索一些数据,就会看到,clusteredindex scan因为所有的行都在聚簇索引叶的级别。
- U* }) t' w2 H4 C例子
9 j# e4 d8 ]* ^  a9 j6 l5 \* o7 {: fselect * from scanseek where name = 'Name340'' {$ F9 }# b% I# @
! d& }4 `1 N* ?2 ~% U4 N
请注意:我把这个答案简写为只是为了更好的理解。如果您有任何问题或建议,请在下面发表评论。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则