SQL Server 獲取表的行數(優化)


一般當你有需求讀取一個表是否存在記錄或者表的行數時,一般都是用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM