Sql 性能介于<;和<;=哪一个是最好的接线员?为什么?
在以下查询中,哪个查询的性能更好?怎么做?请建议我Sql 性能介于<;和<;=哪一个是最好的接线员?为什么?,sql,oracle,query-performance,Sql,Oracle,Query Performance,在以下查询中,哪个查询的性能更好?怎么做?请建议我 SELECT *FROM emp e WHERE e.hiredate<='02-JAN-1981'; SELECT *FROM emp e WHERE e.hiredate<'03-JAN-1981'; 从emp e中选择* 其中e.hiredate无差异。请参见“解释计划”。两者的成本相同 没有区别。请参见“解释计划”。两者的成本相同 没有区别。请参见“解释计划”。两
SELECT *FROM emp e
WHERE e.hiredate<='02-JAN-1981';
SELECT *FROM emp e
WHERE e.hiredate<'03-JAN-1981';
从emp e中选择*
其中e.hiredate无差异。请参见“解释计划”。两者的成本相同
没有区别。请参见“解释计划”。两者的成本相同
没有区别。请参见“解释计划”。两者的成本相同
没有区别。请参见“解释计划”。两者的成本相同
其中e.hiredate从emp e中选择*,其中e.hiredate
其中e.hiredate从emp e中选择*,其中e.hiredate
其中e.hiredate从emp e中选择*,其中e.hiredate
其中e.hiredate从emp e中选择*,其中e.hiredateThey没有在11g中生成错误。我不记得Oracle的情况,但对于Postgres,如果hiredate是时间戳,则这些查询不是等效的查询。对于时间戳,字符串化日期转换为午夜时间戳,因此您问题中的两个日期相隔23小时59米。也就是说,任何真正的差异都可以忽略不计。如果DB没有分解SQL并将操作符转换为它所能使用的最快的机器代码机制,那么它也可能依赖于您的数据;表的大小和与值完全匹配的值可以在索引表上运行。为什么要将日期与字符串进行比较?不是SQL,但类似的比感谢快,Lalit Kumar。实际上,我的一位高级团队成员说,如果我们使用WHERE e.hiredate <= TO_DATE('02-JAN-1981', 'DD-MON-YYYY')
WHERE e.hiredate <= DATE '1981-01-02'
SQL> SET AUTOTRACE ON EXPLAIN
SQL> SELECT * FROM emp e WHERE e.hiredate<= DATE '1981-01-02';
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK 7902 17-DEC-80 800
20
Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 37 | 4 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| EMP | 1 | 37 | 4 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("E"."HIREDATE"<=TO_DATE(' 1981-01-02 00:00:00',
'syyyy-mm-dd hh24:mi:ss'))
SQL> SELECT * FROM emp e WHERE e.hiredate< DATE '1981-01-03';
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK 7902 17-DEC-80 800
20
Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 37 | 4 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| EMP | 1 | 37 | 4 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("E"."HIREDATE"<TO_DATE(' 1981-01-03 00:00:00',
'syyyy-mm-dd hh24:mi:ss'))