首页 > 解决方案 > 在所有存储过程中搜索索引

问题描述

我必须从表中获取使用索引的所有存储过程的列表。我的任务是删除数据库中未使用或未超载索引的索引。

首先我从一个表中获取所有索引:

DECLARE @tableName AS VARCHAR(50) = 'tbl_INVOICES';
SELECT
    IND.name as IndexName
    FROM sys.indexes IND
        INNER JOIN sys.index_columns IND_COL on IND.index_id = IND_COL.index_id and IND.object_id = IND_COL.object_id
    WHERE IND.object_id = OBJECT_ID(@tableName)
        AND is_included_column = 0
    ORDER BY 
        IndexName

对于我获得的每一个索引,我都必须进行另一次搜索,预期的结果是存储的过程列表,其中包含它们正在使用的索引的名称

SELECT
    OBJ.name AS [object_name],
    IND.name AS index_name,
    IND.type_desc,
    IND_USA_STATS.user_seeks, 
    IND_USA_STATS.user_scans,
    IND_USA_STATS.user_lookups, 
    IND_USA_STATS.user_updates,
    OBJ.type,
    IND.type,
    IND_USA_STATS.index_id
FROM
    sys.indexes IND
    INNER JOIN
    sys.objects OBJ ON IND.[object_id] = OBJ.[object_id]
    LEFT JOIN
    sys.dm_db_index_usage_stats IND_USA_STATS ON IND.[object_id] = IND_USA_STATS.[object_id] AND
        IND.index_id = IND_USA_STATS.index_id AND
        IND_USA_STATS.database_id = DB_ID(@tableName)
    WHERE
    OBJ.type IN ('P') 
ORDER BY 
    index_name

好吧,花了很长时间,我无法获得列表,这是我所做的最后一次尝试,它没有给我结果,这里的问题是如何获得使用确定索引的存储过程列表?

标签: sqlsql-server

解决方案


推荐阅读