当前位置: 首页 > 面试题库 >

regexp_replace的性能与在Oracle中翻译的性能有关?

姬博瀚
2023-03-14
问题内容

为了简单translate起见,最好在不占用大量CPU的前提下使用该功能,或者regexp_replace该走的路要走吗?


问题答案:

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

结论:总的来说,我怀疑translate会赢。



 类似资料:
  • 问题内容: 我试图弄清楚当我们使用nio FileChannel和normal FileInputStream/FileOuputStream来读写文件到文件系统时,性能(或优势)是否存在任何差异。我观察到,在我的机器上,两者的性能都相同,而且FileChannel速度也慢了很多倍。我能否请你比较这两种方法的更多详细信息。这是我使用的代码,正在测试的文件在左右350MB。如果我不考虑随机访问或其他

  • 问题内容: 我们有一个本机应用程序,它使用GPU(OpenCL)通过一种特定的方法处理大数据,并且运行得很好,没有问题。该项目的一部分(网络和分发)由进行开发,我们只需要调用本机应用程序/库即可。 我们试图使用类将其称为独立的外部过程。问题是我们无法控制应用程序(事件,处理程序,线程等)。我们还尝试将C代码转换为Java代码,但是性能下降了。除了将本机代码作为进程运行之外,我还在考虑JNA和JNI

  • 问题内容: 似乎在这么晚的时候这样做很疯狂,但是… 我正在使用Rocket Software UniVerse源和SQL目标重建一些ETL基础结构。旧的目标平台是Windows Server 2003上的SQL 2000,新的平台是Windows Server 2012上的SQL2012。在两种情况下,都使用ODBC驱动程序连接到源。一切似乎都可以在新平台上正常运行,但包的执行时间却成倍降低。例如

  • 问题内容: 包括官方Redis文档在内的许多资料都指出,由于可能会阻塞,在生产环境中使用该命令是一个坏主意。如果已知数据集的大致大小,相对于而言,是否有任何优势? 例如,考虑一个数据库,该数据库最多具有100个以下形式的键:其中,是整数。如果要检索所有这些,可以使用命令。这会比使用慢得多吗?还是在这种情况下这两个命令基本相同?可以说这是更好的选择,因为它可以防止出现意外的大集合返回的情况,这是否更

  • 问题内容: 首先,我了解90%的应用程序中的性能差异完全无关紧要,但是我只需要知道哪个是更快的构造即可。那… 当前网上可用的信息令人困惑。许多人说foreach不好,但是从技术上讲应该更快,因为它假定可以简化使用迭代器编写数组遍历的过程。再次被认为是更快的迭代器,但是在PHP中显然还很慢(或者这不是PHP吗?)。我说的是数组函数:next()prev()reset()等,如果它们甚至是函数,而不是

  • 概览 首先我们了解一下 YODAOS 的运行时:YODAOS 基于 ShadowNode 它采用事件驱动、非阻塞I/O模型;在设计之初,ShadowNode 的接口与 Node.js 兼容,因此在大部分场景下,开发者可以像 Node.js 一样使用 ShadowNode,了解这些有利于开发者更快速的进行 YODAOS 上的应用开发。 YODAOS 开发应用时,需要关注应用的性能与稳定性,包括但不限