ホームページ > データベース > mysql チュートリアル > SQL Server で COUNT(*) が非常に遅いのはなぜですか?どうすれば高速化できますか?

SQL Server で COUNT(*) が非常に遅いのはなぜですか?どうすれば高速化できますか?

Barbara Streisand
リリース: 2024-12-26 04:04:09
オリジナル
929 人が閲覧しました

Why is COUNT(*) So Slow in SQL Server, and How Can I Speed It Up?

SQL count(*) パフォーマンスについて

2,000 万行を超えるテーブルに対して count 操作を実行するクエリを考えてみましょう。実行時間は count 式によって大きく異なり、比較が必要な式 (例: count(*) = 1) では大幅な遅延が発生します。

実行速度が遅い根本原因

このパフォーマンスの違いの説明は、SQL Server で採用されている最適化手法にあります。最初のクエリ (count() = 0) の場合、サーバーは行を数えるのではなく、行 (exists(select from BookChapters)) の存在をチェックするように最適化します。

対照的に、他のクエリ (count() = 1 または count() > 1) の場合、SQL Server は行をカウントするための非クラスター化インデックス。ただし、この場合のテーブルには非クラスター化インデックスがないため、サーバーはテーブル全体をスキャンする必要があり、実行時間が大幅に長くなります。

パフォーマンスの向上

count(*) クエリのパフォーマンスを向上させる:

  • を使用します最適化されたクエリ: 比較 (count() = 0 の場合) ではなく、存在チェック (存在する場合 (BookChapters から を選択)) を優先します。
  • 非クラスター化インデックスの作成: 行カウントを強化するために、適切な列に非クラスター化インデックスを導入します。

高速行カウントの代替方法

  • sysindexes システム テーブル: sysindexes テーブルを利用して行を迅速に取得します。クラスター化されたテーブルの数Indexes.
  • partition spart Rows Sum: パーティション化されたテーブルの場合、sys.partitions テーブル (spart) の行値を合計して、簡単な行数を取得します。
  • SYSindexes からの最大 ROWS: SQL 2000 では、最大 ROWS 値をsysindexes テーブルを使用して現在の行数を概算します (更新頻度によって異なる場合があります)。

以上がSQL Server で COUNT(*) が非常に遅いのはなぜですか?どうすれば高速化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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