select count(*) from tablename
僅適合在小資料表,小弟經驗只要資料表十幾萬筆。這個方法就會讓人受不了。
- SELECT CONVERT(bigint, rows)
FROM sysindexes
WHERE id = OBJECT_ID('tablename')
AND indid < 2 直接對系統表作查詢。但是數目不保證準確。
SELECT CAST(p.rows AS float)
FROM sys.tables AS tbl
INNER JOIN sys.indexes AS idx ON idx.object_id = tbl.object_id and idx.index_id < 2 INNER JOIN sys.partitions AS p ON p.object_id=CAST(tbl.object_id AS int) AND p.index_id=idx.index_id WHERE ((tbl.name=N'tablename' AND SCHEMA_NAME(tbl.schema_id)='dbo')) 這個方法的說明小弟真的還無法頓悟,真是書到用時方恨少。大略的意思是說,這個方法直接讀取資料表的屬性來得知row的筆數。但仍只是近似值。
SELECT SUM (row_count)
FROM sys.dm_db_partition_stats
WHERE object_id=OBJECT_ID('Transactions')
AND (index_id=0 or index_id=1);
同樣是存取系統表,但是速度略遜於方法二。
2011年5月19日 星期四
How To:快速取得 large table 的 row count。
最近一個專案任務,有一些資料表的row筆數。少則幾十萬筆,多則千萬筆。使用程式將資料批次塞入之後,只要看資料筆數就可以知道資料是否順利寫入。但是問題來了,一個這麼多資料的資料表,要是用select count("column") from tablename 這種方式的話,鐵定完蛋。哪還有什麼方法可以取得資料筆數呢?
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言