ホームページ >データベース >mysql チュートリアル >SQL Server で遅い COUNT クエリを最適化するにはどうすればよいですか?
SQL パフォーマンスの最適化: クエリのカウント
大規模なデータセットを操作する場合、行をカウントするクエリは計算コストが高くなり、パフォーマンスが低下する可能性があります。この記事では、カウント クエリのパフォーマンスへの影響を調査し、SQL Server でクエリを最適化するためのソリューションを提供します。
カウント クエリのパフォーマンスの違い
テーブルに対する次の SQL クエリを考えてみましょう。 2,000 万行を超える場合:
if (select count(*) from BookChapters) = 0
このクエリは実行されますSQL Server は、
if exists(select * from BookChapters)
に最適化するため、迅速に、行を数えるのではなく、行の存在を確認します。ただし、クエリが次のように変更された場合:
if (select count(*) from BookChapters) = 1
または
if (select count(*) from BookChapters) > 1
実行時間は 10 分を超えて大幅に増加します。
パフォーマンス ギャップについて
パフォーマンスの違いは、条件付きの count クエリの場合に発生します。 (例: = 1, > 1)、SQL Server は異なるアプローチを採用しています。最も狭い非クラスター化インデックスを使用して行をカウントします。この例のテーブルには非クラスター化インデックスがないため、SQL Server はテーブル全体のスキャンに頼る必要があり、パフォーマンスの低下につながります。
最適化テクニック
最適化するにはクエリをカウントするには、次の手法を検討してください:
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 sum (spart.rows) from sys.partitions spart where spart.object_id = object_id(’YourTable’) and spart.index_id < 2
select max(ROWS) from sysindexes where id = object_id(’YourTable’)
以上がSQL Server で遅い COUNT クエリを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。