2010-03-01 75 views

回答

7

你可以嘗試檢查查詢sys.dm_db_index_usage_stats動態管理視圖像這樣的結果:

SELECT * 
FROM sys.dm_db_index_usage_stats 
WHERE [database_id] = DB_ID() 
    AND [object_id] = OBJECT_ID('TableName') 

這將返回東西,像last_user_seek,掃描和對錶的索引更新日期。

Howvever,請注意,當服務器重新啓動時,動態管理視圖的統計信息將被重置。服務器運行的時間越長,如果記錄顯示沒有任何活動,您就越有信心。

我個人也將檢查所有的源代碼,以檢查問題表引用,並搜索所有的存儲過程/ UDF的爲引用太(你可以用SQL Search from Red Gate做到這一點 - 它是免費的)

+0

這正是我所期待的。謝謝! :O) –

0

如果這對您的應用程序和/或公司很重要,並且表格設計正確,那麼每個表格都應該有一個名爲'LastModifiedTime'的列。您可以查詢此表以確定哪些表已過時。

+0

不幸的是,我沒有設計初始數據庫。所以,我想知道sys數據庫表中是否有某些東西可以查詢,以便找出哪些表已不再使用,或者有一段時間沒有使用過。 –

1

如果任何人都在查找數據庫中所有未使用的表格(標題的請求多於問題正文),this guy有一個很好的查詢來引入數據庫中所有未更改的表格。在這種情況下,「未改變」是在sys.dm_db_index_usage_stats中沒有條目的任何表(同樣,與AdaTheDev的回答一樣,僅在最後一次sql服務器重啓後)。

SELECT OBJECTNAME = Object_name(I.object_id), 
     INDEXNAME = I.name, 
     I.index_id 
FROM sys.indexes AS I 
     INNER JOIN sys.objects AS O 
       ON I.object_id = O.object_id 
WHERE Objectproperty(O.object_id, 'IsUserTable') = 1 
     AND I.index_id NOT IN (SELECT S.index_id 
           FROM sys.dm_db_index_usage_stats AS S 
           WHERE S.object_id = I.object_id 
            AND I.index_id = S.index_id 
            AND database_id = Db_id(Db_name())) 
ORDER BY objectname, 
      I.index_id, 
      indexname ASC 
相關問題