有没有办法确定某个列是否未在SQL Server数据库中使用?

时间:2018-02-21 20:10:01

标签: sql-server

我有一个大数据库和很多表,我想确定哪些列没有被任何商店程序或任何查询调用,或者没有使用。

2 个答案:

答案 0 :(得分:0)

我不确定这是否是您正在寻找的内容,但在您查看的数据库中,系统视图的文件夹有三个,其中三个是以下内容。查看all_objects查找表名,然后使用该表的object_id从其他查询中进行选择。这里可能还有其他元数据适合您的需要。

    SELECT *
    FROM sys.all_objects

    SELECT * 
    FROM sys.all_columns
    WHERE object_id = 981578535

    SELECT *
    FROM sys.all_views
    WHERE object_id = 981578535

答案 1 :(得分:0)

经过调查后,我发现了一个名为Query Store的SQL Server新功能,您可以在磁盘中找到包含其他信息的执行。如果您有SQL Server 2016实例,则可以在数据库的属性中找到它。在那里你可以改变捕获的天数,然后你可以在理论上尝试找到有问题的列。这项技术的想法是为您提供更多的性能调整选项。

您可以使用此查询找到信息:

 SELECT TOP 10 qt.query_sql_text, q.query_id, 
    qt.query_text_id, p.plan_id, rs.last_execution_time
FROM sys.query_store_query_text AS qt 
JOIN sys.query_store_query AS q 
    ON qt.query_text_id = q.query_text_id 
JOIN sys.query_store_plan AS p 
    ON q.query_id = p.query_id 
JOIN sys.query_store_runtime_stats AS rs 
    ON p.plan_id = rs.plan_id
    where qt.query_sql_text LIKE '%ColumnToFind%'
ORDER BY rs.last_execution_time;

致谢:Query Store

enter image description here