Col*_*art 8 regex sql oracle performance plsql
对于简单的事情translate,最好是在不太占用CPU的前提下使用该功能,还是regexp_replace要走的路?
Vin*_*rat 10
我认为你正在进行简单的优化.regexp表达式计算起来非常昂贵,结果被缓存,希望将来可以再次使用它.如果您实际使用不同的字符串进行转换,您将看到适度的转换自然更快,因为它是它的专用函数.
这是我的例子,运行于11.1.0.7.0:
SQL> DECLARE
2 TYPE t IS TABLE OF VARCHAR2(4000);
3 l t;
4 l_level NUMBER := 1000;
5 l_time TIMESTAMP;
6 l_char VARCHAR2(4000);
7 BEGIN
8 -- init
9 EXECUTE IMMEDIATE 'ALTER SESSION SET PLSQL_OPTIMIZE_LEVEL=2';
10 SELECT dbms_random.STRING('p', 2000)
11 BULK COLLECT
12 INTO l FROM dual
13 CONNECT BY LEVEL <= l_level;
14 -- regex
15 l_time := systimestamp;
16 FOR i IN 1 .. l.count LOOP
17 l_char := regexp_replace(l(i), '[]()[]', '-', 1, 0);
18 END LOOP;
19 dbms_output.put_line('regex :' || (systimestamp - l_time));
20 -- tranlate
21 l_time := systimestamp;
22 FOR i IN 1 .. l.count LOOP
23 l_char := translate(l(i), '()[]', '----');
24 END LOOP;
25 dbms_output.put_line('translate :' || (systimestamp - l_time));
26 END;
27 /
regex :+000000000 00:00:00.979305000
translate :+000000000 00:00:00.238773000
PL/SQL procedure successfully completed
Run Code Online (Sandbox Code Playgroud)
上11.2.0.3.0:
regex :+000000000 00:00:00.617290000
translate :+000000000 00:00:00.138205000
Run Code Online (Sandbox Code Playgroud)
结论:总的来说,我怀疑translate会赢.
| 归档时间: |
|
| 查看次数: |
10127 次 |
| 最近记录: |