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

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

Barbara Streisand
リリース: 2024-12-26 20:19:12
オリジナル
521 人が閲覧しました

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

SQL カウント (*) パフォーマンス: 遅い理由と改善方法

大きなテーブルを扱う場合は、次のことを理解することが重要です「COUNT()」などの特定のクエリがパフォーマンスにどのように影響するか。この記事では、単純な 'COUNT()' クエリがパラメーターに基づいてパフォーマンスに大きな違いをもたらす可能性がある理由を説明します。

指定された例では、クエリ 'if (select count() from BookChapters) = 0' は、SQL Server が「存在する場合 (BookChapters から を選択)」に最適化されるため、迅速に実行されます。この最適化されたバージョンは、すべての行をカウントするのではなく、単一行のみをスキャンします。

ただし、クエリ 'if (select count() from BookChapters) = 1' および 'if (select count() ) BookChapters より) > 1' SQL Server は異なるロジックを採用しているため、パフォーマンスが遅くなります。テーブルに非クラスター化インデックスがない場合、SQL Server は 'COUNT(*)' 操作に最も狭い非クラスター化インデックスを使用します。非クラスター化インデックスを使用しない場合、テーブル全体をスキャンする必要があり、大規模なデータセットでは時間がかかる可能性があります。

カウント (*) 速度の最適化

改善するには「COUNT(*)」クエリのパフォーマンスについては、次の点を考慮してください。戦略:

  • 非クラスター化インデックスの追加: SQL Server は非クラスター化インデックスを使用して検索を絞り込み、テーブル スキャンを減らすことができます。
  • システム テーブル sysindexes を使用します: このテーブルは、テーブル全体のスキャンのオーバーヘッドを発生させずに行数を提供します。 SQL Server 2005 以降では、次のクエリを使用します:
SELECT OBJECT_NAME(i.id) [Table_Name], i.rowcnt [Row_Count]
FROM sys.sysindexes i WITH (NOLOCK)
WHERE i.indid in (0,1)
ORDER BY i.rowcnt desc
ログイン後にコピー
  • SQL Server 2000 の場合:
SELECT OBJECT_NAME(i.id) [Table_Name], i.rows [Row_Count]
FROM sysindexes i (NOLOCK)
WHERE i.indid in (0,1)
ORDER BY i.rows desc
ログイン後にコピー

これらの手法を利用すると、「COUNT(*)」クエリの実行時間を大幅に短縮できます。特に大規模なデータセットの場合。

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

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