“ IN”内的“ SELECT”将执行多少次?

时间:2019-04-21 17:38:37

标签: sql database oracle oracle12c

我对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之后的子句执行多少次。

0 个答案:

没有答案
相关问题