sql - SUBSTR 或 RPAD 哪个函数作为 oracle 查询性能更好
问题描述
进行 oracle 查询并需要选择一个函数 SUBSTR
或RPAD
. 但我不确定哪个更好。
这里有两个条件:
条件一:
where SUBSTR('Jasonx',0,4) = SUBSTR('Jasonxxxxx',0,4);
条件二:
where RPAD('Jasonx',10,x)='Jasonxxxxx'
解决方案
好吧,可能两者都不是更好。这些条件都没有使用任何列名,所以这是捏造的。如果是,例如,
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>