查看索引缺失
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 中所指示的下一页不同于由叶级页中的下一页指针所指向的页。 |
扩展盘区扫描碎片 | 无序扩展盘区在扫描索引叶级页中所占的百分比。该数与堆集无关。无序扩展盘区是指:含有索引的当前页的扩展盘区不是物理上的含有索引的前一页的扩展盘区后的下一个扩展盘区。 |
平均每页上的平均可用字节数 | 所扫描的页上的平均可用字节数。数字越大,页的填满程度越低。数字越小越好。该数还受行大小影响:行大小越大,数字就越大。 |
平均页密度(完整) | 平均页密度(为百分比)。该值考虑行大小,所以它是页的填满程度的更准确表示。百分比越大越好。 |