MySQL 5.1 リファレンスマニュアル :: 6 最適化 :: 6.2 SELECTステートメントおよびその他のクエリの最適化 :: 6.2.14 LIMITの最適化
« 6.2.13.2 タイトインデックススキャン

6.2.15 テーブルスキャンを避ける方法 »
Section Navigation      [Toggle]
  • 6.2 SELECTステートメントおよびその他のクエリの最適化
  • 6.2.1 EXPLAINを使用して、クエリを最適化する
  • 6.2.2 クエリパフォーマンスの推定
  • 6.2.3 SELECTクエリの速度
  • 6.2.4 WHERE 節最適化
  • 6.2.5 Range 最適化
  • 6.2.6 インデックス結合最適化
  • 6.2.7 IS NULL最適化
  • 6.2.8 DISTINCT最適化
  • 6.2.9 LEFT JOINとRIGHT JOIN最適化
  • 6.2.10 入れ子結合最適化
  • 6.2.11 外側Join 単純化
  • 6.2.12 ORDER BY最適化
  • 6.2.13 GROUP BY最適化
  • 6.2.14 LIMITの最適化
  • 6.2.15 テーブルスキャンを避ける方法
  • 6.2.16 INSERTステートメントの速度
  • 6.2.17 UPDATEステートメントの速度
  • 6.2.18 DELETEステートメントの速度
  • 6.2.19 その他の最適化のヒント

6.2.14. LIMITの最適化

HAVINGを使用するのではなく LIMIT row_countを使用している場合、MySQL によるクエリの処理方法が異なる場合があります。

  • LIMITを使用して数行しか選択していないと、フルテーブルスキャンが行われそうな場合に、MySQL はインデックスを使うことがある。

  • ORDER BY とともに LIMIT row_countを使用している場合、MySQL ではすべてのテーブルがソートされるのではなく、最初の 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節が必要な領域の計算に使用されます。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates