[SQL SERVER][Memo]取得資料表筆數幾種方法

[SQL SERVER][Memo]取得資料表筆數幾種方法

當要得知某個資料表筆數,自己通常都使用 count(1)/count(*),

但也有其他方法來取得資料表筆數,這裡紀錄方便以後查閱。

 

--透過sysindexes、partitions和sp_spaceused取得資料筆數數值可能會因為更新統計值時間誤差而不準確,
--最保險作法請先執行DBCC UPDATEUSAGE ('db_name','table_name') WITH COUNT_ROWS,

--但整體執行時間將拉長。

select rows from sys.sysindexes where id=OBJECT_ID('QTPLG') and indid <2

image

SQL2000大多透過sys.sysindexes ,但在SQL2005後建議使用sys.partitions,

因往後版本sys.sysindexes可能將不存在,在執行計畫中可看到是使用index seek。

 

select rows from sys.partitions where object_id = object_id('QTPLG') and index_id <2

image

SQL2005後所提供的system view,對應sys.sysindexes。

 

exec sp_spaceused 'QTPLG'

image

自己比較常用來查看資料表所使用得磁碟空間。

 

--如果你的資料表超過好幾百萬筆甚至千萬筆資料,那透過sum(1)或count(1)一定非常耗時,

為了要取得資料表的筆數,sum(1)或count(1)都需對index執行full scan。

 

select sum(1) from dbo.QTPLG

image

select count(1) from dbo.QTPLG 

image

 

DBCC CHECKTABLE

檢查組成資料表或索引檢視表的所有頁面和結構的完整性,

一般來說你不會為了要取得資料表筆數而使用DBCC CHECKTABLE。

 

 

參考

sys.partitions (Transact-SQL)

sys.sysindexes (Transact-SQL)