一般來說, 要取得某一個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 的方式來取得總筆數比較安全, 如果以「統計網站累積使用人次功能」來說,數字差一點點其實沒關係的。
沒有留言:
張貼留言