कृपया उपयोग न करें: कहां ',' || to_char (: P5_USER_ID_LIST) || ',' जैसे '%,' || to_char (u.user_id) || ',%' क्योंकि आप पूर्ण बल देंगे तालिका स्कैन हालांकि उपयोगकर्ता तालिका के साथ आपके पास बहुत से लोग नहीं हो सकते हैं इसलिए प्रभाव कम होगा लेकिन एंटरप्राइज़ वातावरण में अन्य तालिकाओं के विरुद्ध यह एक समस्या है।
संपादित करें: मैंने रेगेक्स विधि और वाइल्डकार्ड जैसे विधि के बीच अंतर प्रदर्शित करने के लिए एक स्क्रिप्ट एक साथ रखी है। न केवल रेगेक्स तेजी से है बल्कि यह भी बहुत मजबूत है।
-- Create table
create table CSV_TEST
(
NUM NUMBER not null,
STR VARCHAR2(20)
);
create sequence csv_test_seq;
begin
for j in 1..10 loop
for i in 1..500000 loop
insert into csv_test(num, str) values (csv_test_seq.nextval, to_char(csv_test_seq.nextval));
end loop;
commit;
end loop;
end;
/
-- Create/Recreate primary, unique and foreign key constraints
alter table CSV_TEST
add constraint CSV_TEST_PK primary key (NUM)
using index ;
alter table CSV_TEST
add constraint CSV_TEST_FK unique (STR)
using index;
select sysdate from dual;
select *
from csv_test t
where t.num in (Select Regexp_Substr('100001, 100002, 100003 , 100004, 100005','[^,]+', 1, Level) From Dual
Connect By Regexp_Substr('100001, 100002,100003, 100004, 100005', '[^,]+', 1, Level) Is Not Null);
select sysdate from dual;
select *
from csv_test t
where ('%,' || '100001,100002, 100003, 100004 ,100005' || ',%') like '%,' || num || ',%';
select sysdate from dual;
select *
from csv_test t
where t.num in (Select Regexp_Substr('100001, 100002, 100003 , 100004, 100005','[^,]+', 1, Level) From Dual
Connect By Regexp_Substr('100001, 100002,100003, 100004, 100005', '[^,]+', 1, Level) Is Not Null);
select sysdate from dual;
select *
from csv_test t
where ('%,' || '100001,100002, 100003, 100004 ,100005' || ',%') like '%,' || num || ',%';
select sysdate from dual;
drop table csv_test;
drop sequence csv_test_seq;
ऐसा न करें - सबसे पहले यदि क्वेरी कई उपयोगकर्ता_आईडी के लिए अक्सर चलती है तो यह साझा पूल को कई अनुपयोगी कर्सर के साथ बाढ़ देगा और जल्दी से पूरे डीबी को एक कठिन पार्सिंग समस्या होगी। यदि आप बहुत सावधान नहीं हैं तो SQL इंजेक्शन का एक महत्वपूर्ण जोखिम भी है। –