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的這個字段是索引字段,性能差別不大,影響忽略不計。