2012年3月7日 星期三

如何快速取得 Table 的總筆數

一般來說, 要取得某一個Table的總筆數,可以簡單由 Select Count(*) From TableName 取得。 但是, 這個方法, SQL Server必需執行一次Index Scan之後, 才可以統計出來, 如果該Table的資料筆數很大時, 效率就會降低。

在 SQL Server 裡,也可以透過查詢 sys.partitions 系統資料表來取得資料表的總筆數,如下語法:

SELECT 
ISNULL
(
    (
		SELECT sum (spart.rows) 
		FROM sys.partitions spart 
		WHERE spart.object_id=object_id('dbo.tblUser') and spart.index_id < 2
	),0
) AS [RowCount]

PS. 透過 sysindexes、partitions和sp_spaceused 取得資料筆數數值可能會因為更新統計值時間誤差而不準確, 最保險作法請先執行 DBCC UpdateUsage ('db_name', 'table_name') WITH COUNT_ROWS,然後再取得筆數的資訊,不過,這樣子整體執行時間將拉長。 如果有人對於「筆數」的精準度很要求的話,建議還是用 SELECT COUN(*) FROM TableName 的方式來取得總筆數比較安全, 如果以「統計網站累積使用人次功能」來說,數字差一點點其實沒關係的。

沒有留言:

張貼留言