當我們進行大資料量操作的時候,很想知道資料庫中哪些表進行的邏輯次數最多,還有就是所有表所佔空間大小,以應對錶資料量過大給記憶體增加的負擔,對於單個表如何查詢所在空間大小應該是很簡單的了,如果資料庫中有幾十個甚至幾百個表的時候,單表操作的語句我估計肯定沒有人願意去用,接下來,我就來給大家說一下我所使用的批量查詢資料庫表所佔空間大小的方法。

工具/原料

SQL Server 2005

步驟/方法

首先來講一下我的思路,在要批量查詢的資料庫中新建一個表,主要負責收集本資料庫中所有表的表名,然後通過一個insert的觸發器,每次向表裡新增表名,都會觸發這個觸發器,這個觸發器的作用就是每新增一條資訊,就直接顯示出這個表名所對應的表所佔空間大小。

我們首先來建立一個數據庫輔助表,當然了,這不是關鍵的部分,這裡就省略程式碼了,會基本資料庫操作的朋友應該都瞭解這個語句啦。

【SQL Server】實現批量查詢資料庫表所佔空間

輔助表建立完成以後呢,說一下需求,就是我想要知道這個資料庫中所有表所佔的空間大小以及其他的資訊,那接下來,我們就需要給AddTable這個表建立一個觸發器了。

【SQL Server】實現批量查詢資料庫表所佔空間

雖然看似簡單的幾句,可是還是需要解釋一下這個觸發器的構造,希望能夠對新手有幫助,首先,第一行的意思就是我們建立了一個叫mytrigger的觸發器,這個觸發器是作用在AddTable表上的。

【SQL Server】實現批量查詢資料庫表所佔空間

after insert的意思就是觸發器觸發的時間,就是在執行新增語句之後觸發,還不理解的,直接翻譯英文即可。after ...之後;insert 新增,新增。

【SQL Server】實現批量查詢資料庫表所佔空間

接下來就好理解了,在之前的經驗裡有涉及到,定義一個varchar型別的sql引數,大小為max,然後初始化sql引數為空字元。

【SQL Server】實現批量查詢資料庫表所佔空間

然後我們就利用EXECUTE執行動態語句,其實這裡的“exec sp_spaceused[表名]”就是我們常用的查詢單表所佔空間大小的語句,這裡表名所在的位置為什麼是 TableName呢?或許很多人都有這個疑問,很簡單,因為AddTable的列名就是TableName。

【SQL Server】實現批量查詢資料庫表所佔空間

到這裡,觸發器就已經建立好了,就等對AddTable表進行新增操作來觸發它了,接下來,我們根據之前的需求,把這個資料庫中的表名查詢出來,然後都新增到AddTable表中。首先我們來看一下如何查詢資料庫中所有的表名。語句就是:select Name from sysobjects where xtype='u'

【SQL Server】實現批量查詢資料庫表所佔空間

能查詢出來,那接下來,我們就進行新增,語句為:

Insert AddTable

select Name from sysobjects where xtype='u'

【SQL Server】實現批量查詢資料庫表所佔空間

執行後,我們會發現,在資料庫進行邏輯新增的過程中,對應的表的資料也就出來了。

【SQL Server】實現批量查詢資料庫表所佔空間

注意事項

如果看不懂的,自己就先去學習一下觸發器trigger的相關知識。

時候, 資料庫, 空間, 語句, 查詢資料庫,
相關問題答案