7.6。LIMITとOFFSET

7.6。 LIMIT OFFSET
7.6。 LIMIT     OFFSET
LIMIT OFFSET あなたは残りの部分によって生成された行の一部だけ取り出すことができ  、クエリのを:
LIMITとOFFSETは、クエリによって生成されたラインの一部のみを取得することができます:
 
SELECT SELECT_LIST
table_expression FROM
[ORDER BY ...]
[LIMIT {数| ALL}] [オフセット番号]
 
リミットカウントが与えられた場合(あれば、おそらく少ないものの、その多くの行が返されるより多くない  クエリ自体が少ない行を生成します)。 LIMIT ALLは 省略した場合と同じである LIMITの であるとして、句を LIMIT  NULL引数では。
あなたは、出力の数を制限する場合は、リターンラインは、より限界以下である(ただし、クエリが返す行制限よりは低いですが、それはあまり制限よりも可能性があります)。 ALL LIMIT LIMIT句は同じ、同様のLIMITプラスNULLパラメータを省略しました。
 
OFFSETは、 行を返すために開始する前に、その多くの行をスキップすると言います。 オフセット0 と同じであり  省略 オフセット される、句 OFFSET NULL引数で。
行数が戻り結果行はスキップオフセットを指定します。省略OFFECT 0 OFFECTと同じ、類似のOFFSET追加パラメータNULL。
 
両方の場合 OFFSET LIMITが 表示され、その後、 OFFSET 行がカウントを開始する前にスキップされ  LIMITを 返される行を。
一方、オフセット及びLIMIT、次いでOFFSET指定された行をスキップし、次に行数がLIMIT定義されている戻り指定した場合。
 
使用する場合は LIMITを 、使用することが重要である BY ORDERを に結果行を制約句  のユニークなオーダー。そうしないと、クエリの行の予測不可能なサブセットを取得します。あなたは尋ねるかもしれない  二十行を第十のために、しかし、どのような順序で二十を通じて第十?順序があり  、指定しない限り、未知の ORDER BYを
LIMITを使用する場合は、ORDER BY句は、制御出力行がソートに非常に重要です。 そうしないと、クエリ行の予測不可能なサブセットを取得します。レッツは、それ以外の場合は順序が不明である、あなたは二十行に第十にしたいことを言うが、あなたはORDER BYを指定しない限り、何でそれが二十行に10分の照会注文します。
 
クエリオプティマイザは、かかる LIMITを 問合せ計画を生成するとき、あなたは可能性が非常に高いので、考慮に  あなたが与えるものに応じて異なるプラン(異なる行の注文をもたらす)を取得するために LIMIT と  OFFSET このように、異なる使用 LIMIT / OFFSET クエリ結果の異なるサブセットを選択するために、値は、  一貫性のない結果が得られます あなたはと予測可能な結果の順序強制しない限り、 ORDER BYを これは  バグではありません。それは、SQL結果届けることを約束していないという事実に固有の結果である  場合を除き、特定の順序で問い合わせのを ORDER BYが 順序を制約するために使用されます。
クエリオプティマイザがクエリプランは、このようにLIMITに依存し、OFFSET、LIMITを検討する生成するとき、あなたはおそらく(異なる行の順序を生成するために)異なる実行計画を取得することです。だから、あなたは、ORDER BYを使用しない限りは異なるLIMITの異なるサブセットを使用するそれ以外の場合は、予測可能な結果の順序を取得することを余儀なく/クエリ結果は矛盾した結果が生成されます選択した値を相殺しました。これは故障ではありません。あなたが拘束ORDER BY ORDERを使用するか、SQLクエリの結果を特定の順序で配信されることが保証されていない場合を除き、これは慣習ですので。
 
行はスキップで OFFSET はサーバ内で計算する必要があります句。そのため、大きな  OFFSETは 非効率的であるかもしれません。
行がサーバー内部依然としてOFFSET句をスキップ使用して計算されなければならないので、OFFSETこのような大きな非効率的であることができます。
公開された341元の記事 ウォン称賛54 ビュー880 000 +

おすすめ

転載: blog.csdn.net/ghostliming/article/details/104551943