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