【发布时间】:2018-11-14 06:40:09
【问题描述】:
我想检查有多少用户对表中的特定列进行了读取或扫描。我可以在 SQL Server 或 Teradata 中编写任何 sql 查询吗?
【问题讨论】:
-
是的,SQL Server 有索引使用 DMV。它不显示特定用户,但显示使用情况(搜索、扫描、查找、更新)
-
谢谢。但是,非索引列呢?如何找到没有索引的特定列的使用信息?
-
你可能不得不在这里和那里做一些假设。您可以查询所有对象,获取其中每一列的列表(sql_referenced_entities 和 sql_referencing_entities),将其与您拥有索引的所有列的列表(sys.indexes 和 sys.index_columns)进行对比,并查看差距在哪里是。您还可以找到查找计数非常高的 PK。这意味着您在 PK 上执行密钥查找,而不是在您的 NC 索引上搜索/扫描。
-
或者在您的计划缓存 (sqlskills.com/blogs/jonathan/…) 中寻找键查找,找到正在查找的列,然后对这些列进行索引。
-
启用 Query Logging with Objects 后,您可以在
dbc.QryLogObjectsV中找到有关查询中使用的表/列的信息
标签: sql sql-server tsql teradata