sql >> データベース >  >> RDS >> Oracle

OracleINOperatorでのJPAと1000IDの使用

    INの回避 制限は非効率的であり、JPAは常にその仕事に適したツールであるとは限りません。次の点を考慮してください。

    1. 数千のバインドされた値は、潜在的にメガバイトのSQLになります。このSQLをデータベースに送信するには長い時間がかかります。データベースは、「非常に長いINリストの制限と変換:WHERE x IN(,,, ...)」の質問に対するトムの回答

    2. SQL解析のため、非効率になります。この長いSQLの解析には長い時間がかかるだけでなく、呼び出しごとに異なる数のバインドされたパラメーターがあり、それらは個別に解析および計画されます(それを説明するこの記事

    3. SQLステートメントにはバインドされたパラメーターのハード制限があります。 ORを繰り返すことができます INを回避するために数回 制限がありますが、ある時点でSQLステートメントの制限に達することになります。

    これらのタイプのクエリの場合、通常は一時的なものを作成することをお勧めします。テーブル 。クエリの前に1つ作成し、それにすべての識別子を挿入し、クエリのエンティティテーブルと結合して、INをシミュレートします。 調子。

    理想的には、JPAをストアドプロシージャに置き換えることができます。特に、次のクエリでデータベースに戻すためだけにデータベースから数万の識別子を引き出す場合はそうです。



    1. JPA Criteria APIを使用してPostgreSQL配列列をフィルタリングするにはどうすればよいですか?

    2. MariaDBがあなたの近くの都市にやってくる!

    3. mysqlの期間とフェッチ時間

    4. ActiveRecordクエリにカスタムSELECT句を組み込む