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(*)」クエリのパフォーマンスについては、次の点を考慮してください。戦略:
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
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 サイトの他の関連記事を参照してください。