首页 > 解决方案 > SUBSTR 或 RPAD 哪个函数作为 oracle 查询性能更好

问题描述

进行 oracle 查询并需要选择一个函数 SUBSTRRPAD. 但我不确定哪个更好。

这里有两个条件:

条件一:

where SUBSTR('Jasonx',0,4) = SUBSTR('Jasonxxxxx',0,4);

条件二:

where RPAD('Jasonx',10,x)='Jasonxxxxx'

标签: sqloracle

解决方案


好吧,可能两者都不是更好。这些条件都没有使用任何列名,所以这是捏造的。如果是,例如,

where substr(username, 1, 4) = substr('JASON', 1, 4)
or
where rpad(username, 15, 'x') = 'JASONxxxxxxxxxx'

那么他们两个都无法在USERNAME列上使用可能的索引 - 在这种情况下,您应该创建一个基于函数的索引

其中哪一个会跑得更快?谁知道; 你应该测量它。第一步是检查解释计划,例如

SQL> select * from emp where ename = 'KING';

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7839 KING       PRESIDENT            17.11.81      10000                    10


Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |    39 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |     1 |    39 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("ENAME"='KING')

SQL>

推荐阅读