<原載 20060707>
在 Data Warehouse的世界裡,table多是正常的,table大更是一定的,如果 table的存放沒有好好的規劃,效能會低的可怕。在 SQL Server裡,table是建立 Filegroup之上,這是 Logically的規劃方式,Filegroup所包含的 File才是 Physically存在的儲存體。
如果沒有特別指定,table會建立在 Default Filegroup,也就是 PRIMARY,一個有經驗的 DBA是不會把所有 table都建在 PRIMARY上,因為不分類通常意味著不管理。可是當分類多了以後,要查某一個 table存放在哪一個 Filegroup上又有些麻煩,總不能老是對著 table按右鍵,選 Properties,察看 Storage之下的 Filegroup,這時候我們會利用 sp_help來查,一個 table相關的資料都出來了,但是還是沒辦法查到某一個 Filegroup上面有哪些 tables,如果查 sys.tables呢?抱歉,沒提供。
其實只要一小段 Query就可以達成了,一點都不難
select t.name as TableName, d.name as FilegroupName
from sys.data_spaces d, sys.tables t, sys.indexes i
where i.object_id = t.object_id
and d.data_space_id = i.data_space_id
and i.index_id < 2
order by 2,1
這裡的 Filegroup也包括了 Partition Scheme,如果你有使用 SQL 2005的 Partition功能。至於這樣一段 Query怎麼寫出來的,SQL Server有很多內建的 Stored Procedure,參考一下就可以寫出來了。
留言列表