Сколько раз будет выполняться «SELECT» внутри «IN»? - PullRequest
1 голос
/ 21 апреля 2019

Я меньше подвержен влиянию производительности Oracle. Я хочу знать, как именно Oracle справится с этой ситуацией:

Моя процедура получает разделенную запятыми строку, которую я должен разделить на основе запятой и фильтра.

Я знаю, что это работает:

SELECT * 
FROM some_table 
WHERE some_attribute IN (SELECT 
REGEXP_SUBSTR(comma_separated_string,'[^,]+', 1, LEVEL) 
FROM DUAL
CONNECT BY REGEXP_SUBSTR(comma_separated_string, 
'[^,]+', 1, LEVEL) IS NOT NULL);

Поскольку "REG_EX" сильно загружает процессор, я подумал о замене вышеприведенного на:

SELECT * 
FROM some_table 
WHERE INSTR(','|| comma_separated_string||',', ','|| some_attribute||',') > 
0;`

OR

SELECT * 
FROM some_table 
WHERE ','||comma_separated_string||',' like '%,'|| some_attribute ||',%';`

Таким образом, выбор одного из них зависит от того, как выполняется select, или, если быть точным, от того, сколько раз будет выполнено предложение после where.

...