SQL Server群集索引扫描(群集)是什么意思?
技术问答
710 人阅读
|
0 人回复
|
2023-09-14
|
我有一个查询无法执行,因为因为文件组’DEFAULT’数据库中磁盘空间不足’TEMPDB’分配新页面”。
: b) H Q0 v) h8 k在排除故障的过程中,我正在检查执行计划。有两个昂贵的步骤标记为聚集索引扫描(聚集)。我很难找出这意味着什么?
+ |5 R, H3 W9 r我非常感谢群组索引扫描(群组)的任何解释或在哪里可以找到相关文件的建议。
; C' v0 I8 u+ `) n
* N' q. I% z4 X" Q4 Q8 e 解决方案:
/ q6 Z/ r0 I' {4 E& G/ ^ 我将非常感谢对群组索引扫描(群组)的任何解释。' w% L& W# i8 U$ ]/ y/ G
为了更好地理解你需要同时理解索引搜索和扫描,我将尝试以最简单的方式进行介绍。
9 P1 w% U9 y e" w: J所以让我们建立一个表格
6 Y. T5 ]" P& A7 n3 k! p# ^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树结构直接找到匹配记录的地方
4 d7 f3 @, l2 @. h1 N
; M6 c2 A+ c4 ^5 S, | `您可以使用以下内容DMV根节点和叶节点检查表
y |, T2 H5 A7 I+ ]; Z% F-- 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在列表中建立了聚集索引; @8 P8 c8 H! B4 \" f1 J
让我们找到一些直接匹配的记录
2 n$ ?) v" ~6 A7 d }select * from scanseek where id =340看看执行计划
0 I0 o' x; o) {0 t 4 Z+ x1 W! N3 E" N+ [0 {1 L0 E* L: g
您直接在查询中要求行,这就是为什么获得聚簇索引SEEK的原因。5 g# W0 T, M7 A S1 D3 ~
收集索引扫描: 当Sql# F" m* U4 }8 } e
Server从收集索引的顶部到底部读取行。例如,在非关键列中搜索数据。在我们的表中NAME是非关键列,所以如果我们在name在列中搜索一些数据,就会看到,clusteredindex scan因为所有的行都在聚簇索引叶的级别。2 _' B! ?& J4 J! V
例子2 x3 r) a5 g. h
select * from scanseek where name = 'Name340'
: ?/ v) d% \3 q. Q5 Q
- |% S4 ^, ]/ @/ I3 P2 E请注意:我把这个答案简写为只是为了更好的理解。如果您有任何问题或建议,请在下面发表评论。 |
|
|
|
|
|