Oracle 查詢 in條件個數大於1000的解決方案


Oracle 查詢 in條件個數大於1000的解決方案,我所了解的有如下四種:

1. 把in分組再or:

思路:如果list的長度為2000,可以500個分一組,就有4個組,這4個組之間再or即可。

2. 把in的每個條件分別or 

思絡:這個和第1個其實原理就是一樣的,一開始沒想把它當做一個方案,但是我發現jpa-spec框架就是使用的這個方案,所以暫且把它加進來。

3. 使用oracle臨時表

思絡:借助oracle臨時表, 首先開啟事務,然后把集合插入臨時表,再進行查詢使用in或exists 都可以

4. 使用元組

思絡:即把in條件,拼接成元組的形式,如id in (1,2,3),改為 (1,id) in((1,1),(1,2),(1,3))即可。

 

至於優缺點:

從開發和維護角度上看,因為我們使用的是jpa都是統一封裝的,對開發人員都是透明的,所以沒什么影響。就是第三條由於借助了臨時表,稍微復雜一些。

從性能解決上看,主要是in和exists的區別了,如果從表量很大用exists,如果主表量很大就使用in. 但也是具體情況具體分析。

第1,2,3條,如果in的這個字段是索引字段,性能差別不大,影響忽略不計。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM