如何高效查詢表的總記錄數?[總結-整理-馬克]
首先想到的自然是在表主鍵上應用COUNT函數來查詢了,這個是目前使用最多的方法,沒有之一
SELECT COUNT(1) ROWS FROM product
這里再給出一些其它方法,這些方法或多或少會有一些限制,或者看起來不是那么"完美",但依然有一定的借鑒意義,信息量不大,請客官慢用
另類方法1
充分利用系統自帶的存儲過程SP_SPACEUSED,詳細的使用方式推薦谷哥或度娘,看代碼
EXEC SP_SPACEUSED 'PRODUCT'
結果如下圖所示
另類方法2
根據國際慣例,很多表都會設計一個步長為1的自增長整型(INT)列作為表主鍵,該做法優劣這里不展開討論,僅基於這一"習慣",外加一個假設:該字段連續無為斷,則可以使用MAX函數了,限制較多哈
1,自增長列
2,該列連續
SELECT MAX(ProductCode) TotalCount FROM Product
輸出
如果我有這樣的自增主鍵表,可是不連續,那就不能用咯?其實您可以使用ROW_NUMBER()函數進行修復,再取MAX是一樣的,為了不至於太水,這里仍然歸為另類方法2,復習ROW_NUMBER的同學點這里
另類方法3
充分使用系統表中的信息,優點是速度夠快!缺點是數據不精確,所以要結合您自身項目的特點來判定是否適合使用該方法,代碼奉上
SELECT ROWS FROM [sysindexes] WHERE id = OBJECT_ID('product') and indid < 2
輸出結果
另類方法3修復數據不精確方法,執行以下SQL腳本即可,請不要在生產環境使用!
DBCC UPDATEUSAGE(0, 'product') with COUNT_ROWS
該腳本執行后輸出:DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯系。
另類方法4,虛席以待,期待您的精彩點評!
上邊介紹了一些系統表,系統存儲過程,猜測您可能對下邊的文章感興趣
[MSSQL]GROUPING SETS,ROLLUP,CUBE初體驗
如果您喜歡該博客請點擊右下角推薦按鈕,您的推薦是作者創作的動力!