我对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”占用大量CPU,因此我考虑将其替换为:
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
之后的子句执行多少次。