全表扫描次数

dre*_*tak 4 sql-server sql-server-2012 scan

我想查看有关表被完全扫描多少次的信息。我希望有类似sys.dm_db_index_usage_stats但表扫描的东西。博客keepitssimleandfast 中描述了一种方法,但我宁愿自服务器启动以来进行所有扫描。

我正在寻找的东西也类似于pg_stat_all_tables.seq_scanPostgreSQL。

Jon*_*ite 7

好吧,那张桌子会给你你正在寻找的答案。只需加入 sys.indexes 即可确定索引的类型。表要么堆或聚簇索引,所以在该索引类型的扫描在桌子上的扫描。请参见下面的示例,添加您要查找的任何其他列。

SELECT S.name AS SchemaName
    , O.name AS ObjectName
    , I.name AS IndexName
    , I.type AS IndexType
    , I.type_desc AS IndexType_Desc
    , IUS.user_scans
FROM sys.objects AS O 
    INNER JOIN sys.schemas AS S ON S.schema_id = O.schema_id
    INNER JOIN sys.indexes AS I ON I.object_id = O.object_id
    INNER JOIN sys.dm_db_index_usage_stats AS IUS ON IUS.object_id = I.object_id AND IUS.index_id = I.index_id
WHERE I.type IN (0,1) -- 0=HEAP, 1=CLUSTERED (table)
Run Code Online (Sandbox Code Playgroud)