1. ホーム
  2. mysql

[解決済み] どちらが速いですか?SELECT SQL_CALC_FOUND_ROWS FROM `table`, or SELECT COUNT(*)

2022-04-15 20:33:37

質問

SQLクエリで返す行数を制限する場合、通常はページングで使用しますが、レコードの総数を決定する方法は2つあります。

方法1

を含める。 SQL_CALC_FOUND_ROWS オプションは、元の SELECT を実行し、総行数を取得します。 SELECT FOUND_ROWS() :

SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE id > 100 LIMIT 10;
SELECT FOUND_ROWS();  

方法2

通常通りクエリを実行し、総行数を得るには、次のようにします。 SELECT COUNT(*)

SELECT * FROM table WHERE id > 100 LIMIT 10;
SELECT COUNT(*) FROM table WHERE id > 100;  

どの方式が最適/最速なのでしょうか?

解決方法は?

場合によって異なります。 このテーマについては、MySQL Performance Blog の記事を参照してください。 宛先 SQL_CALC_FOUND_ROWS にするか、しないか。 SQL_CALC_FOUND_ROWS ?

簡単にまとめると、Peterは「インデックスやその他の要因に依存する」と言っています。 この投稿へのコメントの多くは、次のように言っているようです。 SQL_CALC_FOUND_ROWS は、2つのクエリを実行するよりもほとんど常に遅く、時には10倍も遅くなることがあります。