You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量查询所有stored procs的missing indexes 无需逐个核验?

SQL Server 批量查询存储过程缺失索引实现方案

方案说明

你可以通过SQL Server原生的动态管理视图(DMV)组合查询,批量获取所有已运行过的存储过程对应的缺失索引建议,无需逐个核验存储过程逻辑。

注:缺失索引建议基于数据库历史运行统计生成,仅作为核查参考,无需直接落地创建。

前置注意事项

  • 仅已经被实际执行过的存储过程会生成相关索引建议,从未执行的存储过程不会出现在查询结果中
  • 建议结果按照性能提升预估占比、成本下降幅度排序,可优先关注高优先级的缺失索引项

批量查询缺失索引脚本

SELECT 
    OBJECT_NAME(p.object_id) AS 存储过程名称,
    d.statement AS 关联业务表名,
    d.equality_columns AS 等值查询推荐索引列,
    d.inequality_columns AS 范围查询推荐索引列,
    d.included_columns AS 建议包含列,
    s.avg_total_user_cost AS 新增索引后平均可降低的查询成本,
    s.avg_user_impact AS 新增索引后平均性能提升预估占比
FROM 
    sys.dm_exec_procedure_stats p
CROSS APPLY 
    sys.dm_exec_query_plan(p.plan_handle) qp
CROSS APPLY 
    sys.dm_exec_missing_index_groups g
INNER JOIN 
    sys.dm_exec_missing_index_group_stats s 
    ON s.group_handle = g.index_group_handle
INNER JOIN 
    sys.dm_exec_missing_index_details d 
    ON d.index_handle = g.index_handle
WHERE 
    p.database_id = DB_ID()
    AND d.database_id = DB_ID()
ORDER BY 
    s.avg_user_impact DESC, 
    s.avg_total_user_cost DESC

兼容SQL Server 2016语法检查补充

如果需要同步排查存储过程是否残留未适配2016标准的旧语法,可使用以下批量扫描脚本:

SELECT 
    name AS 存储过程名称,
    create_date AS 创建时间,
    modify_date AS 最后修改时间
FROM 
    sys.procedures
WHERE 
    OBJECT_DEFINITION(object_id) LIKE '%COMPUTE%'
    OR OBJECT_DEFINITION(object_id) LIKE '%*=%'
    OR OBJECT_DEFINITION(object_id) LIKE '%=*%'

内容的提问来源于stack exchange,提问作者Daryl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:27:03