加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在Oracle中regexp_replace vs translate的性能?

发布时间:2020-12-12 06:29:44 所属栏目:MsSql教程 来源:网络整理
导读:对于简单的事情,最好使用translate函数,前提是它的CPU密集度较低,或者是 regexp_replace的方法吗? 这个问题来自How can I replace brackets to hyphens within Oracle REGEXP_REPLACE function? 解决方法 我认为你正在进行简单的优化. regexp表达式计算起来
对于简单的事情,最好使用translate函数,前提是它的CPU密集度较低,或者是 regexp_replace的方法吗?

这个问题来自How can I replace brackets to hyphens within Oracle REGEXP_REPLACE function?

解决方法

我认为你正在进行简单的优化. 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

在11.2.0.3.0:

regex     :+000000000 00:00:00.617290000
translate :+000000000 00:00:00.138205000

结论:总的来说,我怀疑翻译会赢.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读