我的表格中包含 st_date 列,其中包含数据类型编号的日期,值类似于 20101201,即(01-DEC-2010)。
如果我使用between子句为一个位于边界之间的日期编写一个select查询,我的问题是是否使用介于或小于或大于运算符,这是性能效率。
select id, sum(duration), sum(hit_count)
from A
where st_date between 20101101 AND 20101130
group by id
该表有数百万条由st_date.Is划分的记录,高于或低于1。
select id, sum(duration), sum(hit_count)
from A
where st_date >= 20101101 AND st_date < 20101130
group by id
请让我知道你的答案。
答案 0 :(得分:5)
第二个更高效,因为它选择的数据更少:)
在内部,between
被重写为&gt; =和&lt; =。您可以在执行计划的谓词信息部分中看到它。
explain plan for select * from t1 where n between 100 and 200;
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("N">=100 AND "N"<=200)
此外,我们在此时:
不要将日期存储为数字。
Oracle知道date '2010-12-31' and date '2011-01-01'
之间的差异是1天。
Oracle也知道20101231和20110101之间的区别是8870。
考虑一下对基数估计的影响。
答案 1 :(得分:4)
BETWEEN
是包容性的。这意味着>=
降低AND <=
更高。
所以你的例子并不完全相同。假设你修复了,那么他们将生成相同的查询计划。
BETWEEN
的使用更加清晰。
答案 2 :(得分:1)