静的データの場合、Oracle IN句の制限は1000ですが、サブクエリから無制限のデータを受け入れます。どうして?なぜoracle IN句には、静的データの場合に1000の制限があるのですか?
答えて
これは、任意のexpression list上の制限です:
式のコンマ区切りのリストが何も1000の以上の式を含めることはできません。
なぜ1000ですか?おそらく実装にはある種の制限が必要であり、それはおそらく十分以上のように見えます。数十年前にその制限が設定されていたのは確かであるかもしれませんが、この場合はIN
がオプティマイザによって複数のOR
ステートメントに変換されるため、制限のパフォーマンス上の理由があります実行計画を見てください)。
とにかくサブクエリとして他のデータから派生することのできない固定値を使って、その近くにいる必要がある合理的なシナリオを思いつくのは苦労します。
logical database limitsと多少関連していると思われます。たとえば、テーブルに1000を超える列を使用することはできません。式リストは挿入文で列と挿入される値の両方をリストするために使用されるので、式リストはそれを照合できなければなりませんが、それを超えなければならない可能性があります。
もちろん...ソフトウェアの内部を見ることなく、あなたは決定的な答えを得ることはまずありません。
列の数と式リスト内の要素の数の間の興味深い関係。これが関連しているとは決して考えなかった。 –
これは、リスト内の多数の値を持つINのパフォーマンスが非常に低いためです。これはOR節のショートカットです。データベースレベルでは、エンジンはINをORに変更します。
また、IN句の中でサブクエリを実行しないようにしてください。EXISTSを使用する方がよいでしょう。
'IN'と' EXISTS'は論理的に等価です。それらはOracleオプティマイザによって同じ方法で処理されます。あなたはどちらかを自分の裁量で使うべきです、それはパフォーマンスの観点からは重要ではありません。 –
'存在する'を使用してください。 '存在する'を使用してサブクエリを作成することもできます。
- 1. SQL IN句1000項目の制限
- 2. MySQL: "IN"句のエントリには制限がありますか?
- 3. DatastaxのDevCenterに行の制限が1000になっているのはなぜですか?
- 4. Neo4j Cypher - クエリの "in"句の制限
- 5. サブスクリプションが既にデータセットを制限している場合、データを制限する必要がありますか?
- 6. データがない場合、使用制限は非常に遅い
- 7. 静的でないクラスメンバーがない場合、クラスを静的にする必要がありますか?
- 8. スイッチケースの中にある場合は、ケースを制限する
- 9. 他のプレースホルダがある場合にIN()句でプレースホルダを使用する方法はありますか?ここ
- 10. このコレクションイニシャライザが静的になるのはなぜですか?
- 11. 関数が静的であると宣言されている場合や、その中のフィールドが静的である場合に静的でない場合は、何らかの違いが生じますか?
- 12. ora_rowscnがUSING句の中にある場合のOracle Merge文の動作
- 13. URLの長さにサーバー側の制限があるのはなぜですか?
- 14. 制限付きの型に明示的にキャストする必要があるのはなぜですか?
- 15. Djangoの静的ファイルに問題がある場合
- 16. Oracle SQLで複数の行を結合する方法(複数の制限がある場合)
- 17. Erlang Number Literalのベースに2.36の恣意的な制限があるのはなぜですか?
- 18. ClassInitializeメソッドを静的にする必要があるのはなぜですか?
- 19. なぜPythonのevalに長さ制限がありますか?
- 20. なぜNode.jsに1.76 GBのメモリ制限がありますか?
- 21. DBExpressを使用してOracle 10gでレコードの挿入制限が255になるのはなぜですか?
- 22. 制限数(1000のエントリに制限Request.Formコレクション)
- 23. IN()句の配列oracle PLSQL
- 24. 特にプリミティブなデータ型の場合、コーディングを「インタフェースに」する必要があるのはなぜですか?
- 25. なぜCassandraはIN制限でクラスタリングキーをクエリできないのですか?
- 26. cudaで静的に割り当てられたメモリを使用する場合のグローバルデバイスのメモリサイズ制限
- 27. 定型データで参照される静的データの場合、HTML
- 28. 一般的な静的メソッドから戻ったときにインスタンス上でジェネリックスを失うことを避けるにはどうすればよいですか?そうでない場合、Javaにはなぜこの制限がありますか?
- 29. CustomFieldSerializerに静的メソッドが必要なのはなぜですか?
- 30. mysqlの 'IN'演算子には値の数に制限がありますか?
Oracle Mightinessに疑問はありません。一般ユーザーには禁止されています。D Just kidding。あなたはWHERE par_id IN( 'a'、 'b'、...、 'z')またはpar_id IN( 'or'、 'pr' ... 'zd')でオーバーライドすることができます –
これを無効にする方法私はstackexhangeで3または4を見つけました)。しかし、理由は単純にOracleのプリロード、クエリの最大バイトなどの基本的な制約のようになるかもしれません – SriniV
12以上のエントリがある場合は、サブクエリを使用する必要がありますとにかく何らかの並べ替え。 1000は任意の大きな制限です - おそらく既に大きすぎます。 –