ホームページ > データベース > mysql チュートリアル > 非常に大きなデータベース テーブルの行を効率的にカウントするにはどうすればよいですか?

非常に大きなデータベース テーブルの行を効率的にカウントするにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-14 17:01:45
オリジナル
655 人が閲覧しました

How Can I Efficiently Count Rows in Extremely Large Database Tables?

大規模テーブル行数統計最適化戦略

大規模なデータベース テーブル内の行をカウントすると、パフォーマンスの問題が発生する可能性があります。一部の記事では 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート