HAVING
を使用するのではなく LIMIT
を使用している場合、MySQL
によるクエリーの処理方法が異なる場合があります。
row_count
LIMIT
を使用して数行しか選択していないと、フルテーブルスキャンが行われそうな場合に、MySQL
はインデックスを使うことがある。
ORDER BY
とともに
LIMIT
を使用している場合、MySQL
ではすべてのテーブルがソートされるのではなく、最初の
row_count
row_count
行の検索が行われた時点でただちにソートを終了する。インデックスを用いて整頓されている場合、これはとても速い方法です。ファイルソートが実行されなければならない場合、最初の
row_count
行が検索されたことを確認する前に、LIMIT
節を用いないクエリーに当てはまるすべての行が選択されなければなりません。そして、それらのほとんど、または全部がソートされなければなりません。いずれの場合でも最初の行が検索されたあとでは、どの結果セットリマインダもソートする必要はありません。また、MySQL
もその必要はありません。
LIMIT
を
row_count
DISTINCT
とあわせて使用した場合、MySQL は一意の
row_count
行を検索するとただちに停止します。
GROUP BY
がキーを順番に読む
(またはキーのソートを実行して読む)
ことで解決でき、キーの値が変わるまでサマリが計算される場合もあります。この場合、LIMIT
では不要な
row_count
GROUP BY
値の計算がすべて行われなくなります。
MySQL
が要求された行数をクライアントに送信すると、クエリーが中止されます
(SQL_CALC_FOUND_ROWS
を使用していない場合)。
LIMIT 0
は常に迅速に空のセットを返します。これは、クエリーの妥当性確認に役立ちます。MySQL
API の 1
つを使用している場合、結果カラム型の獲得も可能です。(この方法は、MySQL
モニター (mysql
プログラム) では、Empty
set
と表示されるだけで働きません。このため、代わりに
SHOW COLUMNS
または
DESCRIBE
を使用する必要があります)。
サーバーで一時テーブルを使用してクエリーが解決される場合、LIMIT
節が必要な領域の計算に使用されます。
row_count