SQL索引二(查看索引的缺失)

本文探讨如何查看SQL索引的缺失和碎片情况。重点介绍了包含列在索引中的作用,以及如何根据需求创建新索引。通过DBCC SHOWCONTIG命令展示了查询索引碎片的实例,分析了表'A'的索引状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看索引缺失

select * from sys.dm_db_missing_index_details

index_handle

int

标识特定的缺失索引。 该标识符在服务器中是唯一的。 index_handle是此表的键。

database_id

smallint

标识带有缺失索引的表所驻留的数据库。

object_id

int

标识索引缺失的表。

equality_columns

nvarchar(4000)

构成相等谓词的列的逗号分隔列表,谓词的形式如下:

 

table.column =constant_value

inequality_columns

nvarchar(4000)

构成不等谓词的列的逗号分隔列表,例如以下形式的谓词:

 

table.column > constant_value

 

“=”之外的任何比较运算符都表示不相等。

included_columns

nvarchar(4000)

用于查询的涵盖列的逗号分隔列表。 有关涵盖的详细信息或包含的列,请参阅创建带有包含列的索引

 

对于内存优化的索引 (包括哈希和内存优化非聚集),忽略included_columns。 每个内存优化索引中均包含表的所有列。

statement

nvarchar(4000)

索引缺失的表的名称。

 

注:include:

非键列即包含列 只存在非聚集索引中。

包含列的优点

1)他们可以是不允许作为索引键列的数据类型。

2)在计算索引键列数或索引键大小时, 数据库引擎 不考虑它们。


重点:如果根据以上缺失索引从新建立新的索引(注:并不是所有缺失索引都需要建立索引,根据实际情况来建立,毕竟建立索引是以消耗空间换时间!!!)

建立语句: CREATE [UNIQUE|CLUSTERED|NONCLUSTERED] INDEX INDEX_NAME ON TABLE_NAME(PROPERTY_NAME)  INCLUDE(INCLUDE_NAME)

PS:

INDEX_NAME:索引名称

TABLE_NAME:表名称

PROPERTY_NAME:索引列 即上述表格中的equality_columns,inequality_columns

INCLUDE_NAME:包含列included_columns

 

此处附上自己的理解:

1)针对于查询的字段 一般需要放到INCLUDE 包含字段里面;

2)对于关联关系的字段(inner join、left等) 一般可以放到include(非键列、包含列) 或者索引字段中,但是放到include(非键列、包含列) 里面 对于消耗较低;

3)对于where 条件的字段或者group by、order by 的数据一般 作为索引字段;

具体索引基础可参考:SQL索引


查询索引碎片

DBCC ShowContig(A)

 

DBCC SHOWCONTIG 正在扫描 'A' 表...
表: 'A' (143272632);索引 ID: 1,数据库 ID: 9
已执行 TABLE 级别的扫描。
- 扫描页数................................: 621
- 扫描区数..............................: 78
- 区切换次数..............................: 77
- 每个区的平均页数........................: 8.0
- 扫描密度 [最佳计数:实际计数].......: 100.00% [78:78]
- 逻辑扫描碎片 ..................: 0.00%

- 区扫描碎片 ..................: 7.69%
- 每页的平均可用字节数.....................: 217.1
- 平均页密度(满).....................: 97.32%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

 

扫描表或索引的页数。
扫描扩展盘区表或索引中的扩展盘区数。
扩展盘区开关数遍历索引或表的页时,DBCC 语句从一个扩展盘区移动到其它扩展盘区的次数。
平均扩展盘区上的平均页数页链中每个扩展盘区的页数。
扫描密度
[最佳值:实际值]
最佳值是指在一切都连续地链接的情况下,扩展盘区更改的理想数目。实际值是指扩展盘区更改的实际次数。如果一切都连续,则扫描密度数为 100;如果小于 100,则存在碎片。扫描密度为百分比值。
逻辑扫描碎片对索引的叶级页扫描所返回的无序页的百分比。该数与堆集和文本索引无关。无序页是指在 IAM 中所指示的下一页不同于由叶级页中的下一页指针所指向的页。
扩展盘区扫描碎片无序扩展盘区在扫描索引叶级页中所占的百分比。该数与堆集无关。无序扩展盘区是指:含有索引的当前页的扩展盘区不是物理上的含有索引的前一页的扩展盘区后的下一个扩展盘区。
平均每页上的平均可用字节数所扫描的页上的平均可用字节数。数字越大,页的填满程度越低。数字越小越好。该数还受行大小影响:行大小越大,数字就越大。
平均页密度(完整)平均页密度(为百分比)。该值考虑行大小,所以它是页的填满程度的更准确表示。百分比越大越好。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值