USE DatabaseName
GO
SELECT DISTINCT TOP 100
s.total_logical_reads / s.execution_count
, SUBSTRING(t.TEXT, (s.statement_start_offset / 2) + 1, (
(
CASE s.statement_end_offset
WHEN - 1
THEN DATALENGTH(t.TEXT)
ELSE s.statement_end_offset
END - s.statement_start_offset
) / 2
) + 1) AS statement_text
, s.execution_count AS ExecutionCount
, s.max_elapsed_time AS MaxElapsedTime
, ISNULL(s.total_elapsed_time / s.execution_count, 0) AS AvgElapsedTime
, s.creation_time AS LogCreatedOn
, *
FROM sys.dm_exec_query_stats s
CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) t
WHERE TEXT LIKE '%Table_or_View_Index_Is_Defined_On%'
AND TEXT NOT LIKE '%sys.dm_exec_query_stats s%'
ORDER BY s.total_logical_reads / s.execution_count DESC
根据您的最终目标,您可以根据自己的喜好调整顺序。
一旦你确定了一个你想进一步深入的查询,然后通过以下方式提取它的执行计划:
SELECT query_plan
FROM sys.dm_exec_query_plan(PLAN_HANDLE_FROM_ABOVE_RESULTSET)
您将需要深入研究查询计划以确定特定查询是否正在执行扫描而不是搜索,但您可以(相对)通过运行以下命令快速识别哪些查询正在使用特定索引:
根据您的最终目标,您可以根据自己的喜好调整顺序。
一旦你确定了一个你想进一步深入的查询,然后通过以下方式提取它的执行计划: