इस सीमा के आसपास तीन संभावित तरीके हैं:
1) जैसा कि आप पहले ही बता चुके हैं:स्टेटमेंट को 1000 के बैच में विभाजित करें
2) मानों का उपयोग करके एक व्युत्पन्न तालिका बनाएं और फिर उनसे जुड़ें:
with id_list (id) as (
select 'V1' from dual union all
select 'V2' from dual union all
select 'V3' from dual
)
select *
from the_table
where column_name in (select id from id_list);
वैकल्पिक रूप से आप उन मूल्यों में भी शामिल हो सकते हैं - और भी तेज़ हो सकते हैं:
with id_list (id) as (
select 'V1' from dual union all
select 'V2' from dual union all
select 'V3' from dual
)
select t.*
from the_table t
join id_list l on t.column_name = l.id;
यह अभी भी वास्तव में एक बहुत बड़ा बयान उत्पन्न करता है, लेकिन इसमें 1000 आईडी की सीमा नहीं है। मुझे यकीन नहीं है कि ओरेकल इसे कितनी तेजी से पार्स करेगा।
3) मानों को एक (वैश्विक) अस्थायी तालिका में डालें और फिर एक IN
. का उपयोग करें खंड (या एक JOIN
) यह शायद सबसे तेज़ समाधान होने जा रहा है।