一般當你有需求讀取一個表是否存在記錄或者表的行數時,一般都是用count(*),但是數據量太大時,用這種方式往往不合適
(1)為了獲得表中的記錄數,我們通常使用下面的SQL語句:
SELECT COUNT(*) FROM [dbo].[QuestionLibraryAnswer]
這條語句會執行全表掃描才能獲得行數。
(2)但下面的SQL語句不會執行全表掃描一樣可以獲得行數:
SELECT rows FROM sysindexes WHERE id = OBJECT_ID('[dbo].[QuestionLibraryAnswer]') AND indid < 2
測試數據(8000條):
count(*)讀取次數42次
優化后的讀取次數2次

sysindexs 是對數據庫里的數據表、索引的一個對應表.id 即是給它們定義的編號.
這句話的意思是查找’table_name‘這個表的數據總行數.
而indid是指它的指索引ID的類型: 0:堆 1:聚集索引 >1: 非聚集索引,一般情況下表的indid是0,所以加了一個 indid < 2
