Я меньше подвержен влиянию производительности 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
.