大型表行數統計最佳化策略
統計大型資料庫表中的行數可能會帶來效能挑戰。雖然一些文章建議謹慎使用 SELECT COUNT(*)
,但對於擁有海量行數和列數的表來說,其速度仍然是一個值得關注的問題。本文旨在探討一種與資料庫廠商無關的,用於精確統計大型表行數的方法。
資料庫廠商無關方案
最簡單、最可靠的方法是使用標準的 COUNT(*)
函數。現代資料庫系統即使對於大型表也對該函數進行了最佳化,因為它只需要讀取足夠的資料來估算行數。因此,COUNT(*)
是首選方案。
SQL Server 近似方案(超出本文範圍)
雖然 SQL Server 存在一些潛在的近似方案,但這些方法不在本文討論範圍內。
其他注意事項
COUNT(1)
和 COUNT(PrimaryKey)
在行數統計方面與 COUNT(*)
等效。 COUNT(*)
在超大型表上的效能。 COUNT(*)
獲取的行數可能由於掛起的交易而並非完全準確。 SQL Server 範例
對於一個大約包含 14 億行和 12 列的表,使用 COUNT(*)
並帶有 NOLOCK
提示的以下查詢在 5 分鐘 46 秒內完成:
<code class="language-sql">SELECT COUNT(*) FROM MyBigtable WITH (NOLOCK)</code>
或者,使用系統動態管理視圖 (DMV) 的以下查詢可在不到一秒鐘內完成:
<code class="language-sql">SELECT Total_Rows = SUM(st.row_count) FROM sys.dm_db_partition_stats st WHERE object_name(object_id) = 'MyBigtable' AND (index_id</code>
(註:第二個SQL語句不完整,原文缺失部分程式碼)
以上是如何有效率地統計超大資料庫表的行數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!