ホームページ >データベース >mysql チュートリアル >非常に大きなデータベース テーブルの行を効率的にカウントするにはどうすればよいですか?
大規模テーブル行数統計最適化戦略
大規模なデータベース テーブル内の行をカウントすると、パフォーマンスの問題が発生する可能性があります。一部の記事では SELECT COUNT(*)
を慎重に使用することを推奨していますが、多数の行と列を持つテーブルではその速度が依然として懸念されます。この記事の目的は、大規模なテーブルの行を正確にカウントするためのデータベース ベンダーに依存しない方法を探ることです。
データベースベンダーに依存しないソリューション
最も簡単で信頼性の高い方法は、標準の COUNT(*)
関数を使用することです。最新のデータベース システムでは、行数を推定するのに十分なデータを読み取るだけで済むため、大規模なテーブルに対してもこの関数が最適化されます。したがって、COUNT(*)
が推奨されるオプションです。
SQL Server の近似 (この記事の範囲外)
SQL Server についてはいくつかの推定値が考えられますが、これらの方法はこの記事の範囲を超えています。
その他の注意事項
COUNT(1)
と COUNT(PrimaryKey)
は、行数の点では COUNT(*)
と同等です。 COUNT(*)
のパフォーマンスが向上します。 COUNT(*)
から取得される行数が完全に正確ではない可能性があります。 SQL サーバーの例
約 14 億行と 12 列のテーブルの場合、COUNT(*)
ヒントと NOLOCK
を使用した次のクエリは 5 分 46 秒で完了しました。
<code class="language-sql">SELECT COUNT(*) FROM MyBigtable WITH (NOLOCK)</code>
あるいは、システムの動的管理ビュー (DMV) を使用した次のクエリは 1 秒以内に完了できます。
<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>
(注: 2 番目の SQL ステートメントは不完全で、コードの一部が元のテキストから欠落しています)
以上が非常に大きなデータベース テーブルの行を効率的にカウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。