「制限1000、25」と「制限25オフセット1000」


11

最近、MySQLにoffset機能があることがわかりました。オフセットの結果、またはオフセットと制限バリアントの違いについてのドキュメントを探していましたが、探しているものが見つからないようです。

テーブルに10.000行あり、行1.000から25件の結果が必要だとします。これまでのところ、私は同じ結果を得るために両方を行うことができました:

SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000

私が知りたいのは、この2つの違いです。

  • これは実際に同じことをするのですか、それとも私の理解は間違っていますか?
  • 大きなテーブルでは1つ遅い/速い
  • 変更するとオフセットの結果は変わりますかWHERE column=1(たとえば、列に100を超える異なる値がある)
  • オフセットの結果を変更したときORDER BY column ASC(ランダムな値があると仮定して)

これが「愚かな」質問であり、誰かがその主題を啓発する文書を知っている場合は、それらを返信に追加してください。
私は、オフセットがデータベースで見つかった最初のX行をスキップして、ソートと場所を無視していると感じています。


MySQLのドキュメントはこれを完全に説明しています。自分で見たくない理由はありますか?
siride 14

1
「PostgreSQLとの互換性のために、MySQLはLIMIT row_count OFFSETオフセット構文もサポートしています。」(dev.mysql.com/doc/refman/5.5/en/select.htmlから)。
siride 14

これはまだ私の質問に答えないので。あなたの引用(およびページ上のテキスト)から、オフセットは制限と同じものであると結論付けるべきです。
Martijn 14

1
同じことを表現するための構文は異なります。他のサブ質問は、タイトルや投稿の最初の部分とは完全に異なります。
siride 14

1
同じことであれば、どちらの状況でも他のクエリへの影響は変わらないことを理解しています。私はそれが同じことだとは確信していませんでした、それが私が探していた答えでした、ありがとう。
Martijn、2014

回答:


9

運用面で

SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000

ステートメントに違いはまったくありません

@sirideのコメントがまさにポイントです。

LIMIT 1000,25 手段 LIMIT 25 OFFSET 1000

同じドキュメントから

LIMIT row_count に相当 LIMIT 0, row_count

あなたの実際の質問

  • これは実際に同じことをするのですか、それとも私の理解は間違っていますか?
  • 大きなテーブルでは1つ遅い/速い

両方のクエリが同じであるため、違いはありません

  • WHERE column = 1を実行するとオフセット変更の結果が変わりますか(たとえば、列に100を超える異なる値がある)
  • ORDER BY列のASCを実行すると、オフセット変更の結果は変わりますか?

を使用LIMITしても結果セットは変更されません。結果セット内を移動するだけです。

このクエリ

SELECT id,name,description FROM tablename ORDER BY id LIMIT 1000,25

とは違うだろう

SELECT * FROM (SELECT id,name,description FROM tablename LIMIT 1000,25) A ORDER BY id;

LIMITが別の段階で適用されているためです。

tablenameの行数が1000未満の場合、最初のクエリは何も返しません

サブクエリの行数が1000未満の場合、2番目のクエリは何も返しません

結論

適切な段階でデータをソートしていることを確認するには、クエリをスカルプトする必要があります


1
ありがとうございました。これは、「ステートメントにまったく違いはない」というのがまさに私が探していたものであり、その情報から、並べ替えや重要でない場所を確認できます。同じことであるかどうか確信が持てませんでした。悪魔をコーディングする際に詳細を確認します。確実に知りたいのですが。)
Martijn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.