簡體   English   中英

如何找出哪些查詢(或計划)使用 Azure SQL 或 SQL 服務器上的特定索引?

[英]How to find out which queries (or plans) use a particular index on Azure SQL or SQL Server?

我可以從sys.indexessys.dm_db_index_usage_stats獲得索引使用的總體統計信息,並且可以很容易地看到有問題的索引被大量使用。 但是,我無法確定哪些計划實際使用了該索引。

我的總體目標是確定包含相關索引的最佳列列表,如果這有什么不同的話。 我懷疑當前列表太長,但應用程序太復雜,無法在不驗證假設的情況下確定。

我沒有找到任何可以幫助的系統視圖,我最終只是搜索計划 XML 作為文本來查找索引的名稱。

SELECT query_plan, query_stats.last_execution_time, sql_text.text
FROM sys.dm_exec_cached_plans as cached_plan
CROSS APPLY sys.dm_exec_query_plan(cached_plan.plan_handle)  as exec_query_plan
CROSS APPLY sys.dm_exec_sql_text(cached_plan.plan_handle) AS sql_text
INNER JOIN sys.dm_exec_query_stats as query_stats
    ON query_stats.plan_handle = cached_plan.plan_handle
WHERE CHARINDEX('INDEX_NAME', CAST(exec_query_plan.query_plan AS NVARCHAR(MAX))) > 0

-- If you would like to see only the index usage instead of everything (like statistics)
--WHERE CHARINDEX('Index="[INDEX_NAME]"', CAST(exec_query_plan.query_plan AS NVARCHAR(MAX))) > 0

-- to eliminate this query itself and other system queries
AND sql_text.text NOT LIKE '%msparam%'
AND sql_text.text NOT LIKE '%sys.%'

-- Optional conditions to narrow down search
--AND sql_text.text NOT LIKE 'MERGE%' 
--AND sql_text.text NOT LIKE '%UPDATE%'
--AND sql_text.text NOT LIKE '%INSERT%'

ORDER BY query_stats.last_execution_time DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM