私はこれに対する答えをすでに知っていると思いますが...
次の 3 つの MySQL ステートメントがあるとします。
SELECT SQL_CALC_FOUND_ROWS title FROM STUFF LIMIT 1000000, 1;
SELECT SQL_CALC_FOUND_ROWS title FROM STUFF LIMIT 1;
SELECT title FROM STUFF;
3つの間にパフォーマンスに大きな違いはありますか?
SQL_CALC_FOUND_ROWS
答えを計算するためにすべての行を反復する必要があるため、1 と 2 の間に時間差はありません (ただし、テーブルに 1000000 行未満の行がある場合、最初のクエリは何も返さない可能性があります)。
3 番目のクエリは、行をカウントするだけでなく、テーブル全体を出力します。
それは場合によって異なりますORDER BY
が、順序付けされている列にインデックスを付けて追加すると、大幅に高速になる可能性があります。
これは、結果セット全体をスキャンおよびソートせずに実行されるためです。インデックスを使用すると、必要な量の行が生成されるとすぐに開始および停止されるインデックス レンジ スキャンが生成されます。