回答

收藏

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

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

我有一个查询无法执行,因为因为文件组’DEFAULT’数据库中磁盘空间不足’TEMPDB’分配新页面”。
" a2 s9 ~5 j+ L& g9 X在排除故障的过程中,我正在检查执行计划。有两个昂贵的步骤标记为聚集索引扫描(聚集)。我很难找出这意味着什么?
1 r; a; i  `/ J  Y& t我非常感谢群组索引扫描(群组)的任何解释或在哪里可以找到相关文件的建议。
4 O8 u$ l# b0 p4 U                                                                8 S/ j0 W& }1 R. R" f
    解决方案:                                                               
- M  a) P5 H1 D8 X                                                                我将非常感谢对群组索引扫描(群组)的任何解释。
( R& i3 O1 H% W$ ~为了更好地理解你需要同时理解索引搜索和扫描,我将尝试以最简单的方式进行介绍。
9 M6 \5 \" r1 y' a7 a3 L% x所以让我们建立一个表格
6 n8 q: ~5 i' E6 W7 p7 @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树结构直接找到匹配记录的地方$ z+ `, t: _& ~2 n/ N  A
  S) r4 G; f' d  w9 |2 K7 G# A9 Z
您可以使用以下内容DMV根节点和叶节点检查表! J0 O* ]% L; X2 o, N
-- 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在列表中建立了聚集索引
7 K- P9 ?* V$ k3 S' R让我们找到一些直接匹配的记录
: _! c! }; V4 W" o. b2 qselect * from scanseek where id =340看看执行计划" }. S' E& j  a5 m

# s! j* [  @: l, g: E; n, n% U  n您直接在查询中要求行,这就是为什么获得聚簇索引SEEK的原因。, b; s; F+ T8 i. f
收集索引扫描:    当Sql( c) c- J. |$ i& R( A& Y, O# _
Server从收集索引的顶部到底部读取行。例如,在非关键列中搜索数据。在我们的表中NAME是非关键列,所以如果我们在name在列中搜索一些数据,就会看到,clusteredindex scan因为所有的行都在聚簇索引叶的级别。) Y9 N* R% f3 J, W8 {
例子* l; q% h" ]: M; p
select * from scanseek where name = 'Name340'
' M. p( U$ X) |8 E1 m) I5 Q; g6 a0 a+ f- O6 O
请注意:我把这个答案简写为只是为了更好的理解。如果您有任何问题或建议,请在下面发表评论。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则