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 结论:总的来说,我怀疑翻译会赢. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |