web-dev-qa-db-ja.com

'LIMIT'パラメータはSQLでどのように機能しますか?

たとえば4000行あり、X制限を定義します。

X行が見つかった後、クエリは停止しますか?または、クエリはすべての行を検索し、見つかった行からX行を取得しますか?

ありがとうございました。

18
Luis

から MySQLリファレンスマニュアル

ORDERBYでLIMITrow_countを使用する場合、MySQLは、結果全体を並べ替えるのではなく、並べ替えられた結果の最初のrow_count行を見つけるとすぐに並べ替えを終了します。インデックスを使用して順序付けを行う場合、これは非常に高速です。ファイルソートを実行する必要がある場合は、最初のrow_count行が見つかったことを確認する前に、LIMIT句のないクエリに一致するすべての行を選択し、それらのほとんどまたはすべてをソートする必要があります。いずれの場合も、最初の行が見つかった後は、結果セットの残りを並べ替える必要はなく、MySQLは並べ替えません。

したがって、LIMITが適用される前に、結果セット全体がわかっている可能性があります可能性があります。しかし、MySQLはそれができないすべてのことを試みます。また、クエリに一致する便利なインデックスを提供することで、それを支援できます。

編集:さらに、セットがソートされていない場合、結果セットに十分な行がストリーミングされるとすぐにSELECT操作が終了します。

22
Yuck

SELECT * FROM your_table LIMIT 0, 10

これにより、データベースの最初の10件の結果が表示されます。

SELECT * FROM your_table LIMIT5, 5

これにより、レコードが表示されます6、7、8、9、および1

MySql;5 + 1または6番目のレコードからカウントを開始してほしいと言っているようなものですが、5レコードまでしか選択しないでください

16
ErickBest

私はあなたがMySQLについて考えていると仮定しています。 ドキュメント によると、答えはそれによって異なります。 LIMITHAVINGなし)を使用している場合は、次のようにします。

  • LIMITで数行のみを選択している場合、MySQLは、通常は全表スキャンを実行することを好む場合に、インデックスを使用する場合があります。
  • MySQLが必要な数の行をクライアントに送信するとすぐに、SQL_CALC_FOUND_ROWSを使用していない限り、クエリを中止します。

documentation で読むべき他のいくつかのケースがあります。

2
Dirk

LIMIT句で指定された行数が見つかった後、停止します。これは、大量のデータで確認できます。テーブルのすべての行を取得し、その後フィルタリングしている場合は不可能な時間で結果を取得します。

1
Renato Dinhani