如何查询哪些表存在缺失索引_系统性能视图查询方法

阿墨同学_6159

阿墨同学_6159

2026-05-10

739人浏览

原创

sql server缺失索引需联查三个dmv:sys.dm_db_missing_index_details(定位列和条件)、sys.dm_db_missing_index_groups(关联分组)、sys.dm_db_missing_index_group_stats(评估收益),单独查任一视图信息不完整。

直接查 sql server 缺失索引的三个核心视图

sql server 不会主动报警“你缺索引了”,但它每执行一条查询,都会悄悄记下:“要是这里有个索引,能快 avg_user_impact%”。这些线索全藏在三个动态管理视图(dmv)里,必须联查才有意义:

  • sys.dm_db_missing_index_details:告诉你“缺在哪张表、哪几列、等值还是范围条件、要不要 INCLUDE”
  • sys.dm_db_missing_index_group_stats:告诉你“这个缺失索引如果建了,预计能省多少成本,被多少次查询用到”
  • sys.dm_db_missing_index_groups:把上面两个视图串起来——没有它,你根本不知道哪组建议对应哪条记录

单独查任何一个,信息都是碎片。比如只看 sys.dm_db_missing_index_details,你会看到一堆 equality_columns,但完全不知道这条建议到底值不值得建——可能它只被跑过 1 次,user_seeks = 1,再高 avg_user_impact 也没意义。

用推荐公式过滤出真正该建的索引

官方推荐的排序逻辑不是拍脑袋来的:avg_total_user_cost * avg_user_impact * (user_seeks + user_scans)。这个乘积本质是“总收益预估”,它自动把高频、高成本、高提升潜力的建议顶到前面。

  • 别直接抄 TOP 10 结果建索引——有些推荐的 improvement_measure 很高,但 user_seeks 是 0,全是 user_scans,说明是低效全表扫描场景,建索引未必治本
  • 注意 database_id 和 object_id:结果里混着多个库、多张表的建议,务必用 DB_NAME(database_id) 和 OBJECT_NAME(object_id, database_id) 解析出真实表名,否则容易建错库
  • inequality_columns 后面跟 LIKE '%xxx' 的列,建索引效果极差,这类建议可直接忽略(B-Tree 索引对前导通配符无效)

MySQL 里没有“缺失索引”视图,得换思路验证

MySQL 没有类似 SQL Server 的 DMV,不能“预测缺失”,只能“反查没用上的索引”。关键不是找“该建什么”,而是确认“现有查询有没有走索引”:

  • 对慢查询加 EXPLAIN,重点看 type 字段:如果是 ALL 或 index,基本等于没走有效索引
  • SHOW INDEX FROM table_name 只显示“有哪些索引”,不反映使用情况;而 INFORMATION_SCHEMA.STATISTICS 虽结构化,但同样不带访问统计
  • 想长期监控,得开 performance_schema 并查 events_statements_summary_by_digest,结合 rows_examined 和 rows_sent 比值判断扫描效率——比值远大于 1,大概率缺索引

别忘了重启后数据清零这个硬限制

SQL Server 的缺失索引数据从服务启动时开始累计,sys.dm_db_missing_index_details 里所有记录在每次重启后全部消失。这不是 bug,是设计:

  • 如果你只在周五下午查一次,发现一堆高分建议,周一就重启了——全没了,白忙
  • 生产环境建议搭配 SQL Agent 定期(比如每天凌晨)把关键字段(database_id, object_id, equality_columns, improvement_measure)存进自定义表,持续观察趋势
  • 阿里云 DAS、腾讯云 DBbrain 这类平台的“缺失索引”功能,底层就是帮你做了这件事:定时采集 + 去重合并 + 归因到具体慢 SQL,别以为它是魔法,它只是替你写了那个采集作业

真正容易被忽略的,不是“怎么查”,而是“查出来的数据能信多久”——SQL Server 给你的是一张快照,不是病历本。

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2213

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1359

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

795

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

3032

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

5088

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1139

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

5351

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

4722

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

6234

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习