首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oracle在日期范围查询上的性能

问oracle在日期范围查询上的性能
EN

Database Administration用户
提问于 2018-02-15 16:38:51
回答 1查看 3.8K关注 0票数 3

我想数一数某机构在某段时间内发出的命令数目。但是,我发现下面的查询(时间范围为2天)比每次执行两个单独的查询一天要慢得多。

代码语言:javascript
复制
 SELECT COUNT(*)  FROM ORDER_HISTORY
 WHERE organization = 'BA' AND  TIMESTAMP > = TO_DATE('2016-01-05', 'YYYY-MM-DD') 
 AND TIMESTAMP<= TO_DATE('2016-01-05', 'YYYY-MM-DD')+2;

我在列timestamps上有一个索引,在organization列上有另一个索引

这是我的表的架构。列timestamp的类型为DATE。

2天以上的查询执行计划使用organization上的索引:

1天以上的查询执行计划使用timestamp上的索引:

有一些统计数据:

代码语言:javascript
复制
   SELECT COUNT(*)  FROM ORDER_HISTORY
   WHERE ORGANIZATION = 'BA' ;

给了2359847。

代码语言:javascript
复制
   SELECT COUNT(*)  FROM ORDER_HISTORY
   WHERE TIMESTAMP > = TO_DATE('2016-01-05', 'YYYY-MM-DD')
   AND TIMESTAMP<= TO_DATE('2016-01-05', 'YYYY-MM-DD')+1;

给9260。相同的查询在两天内得到16510。

为什么我会得到甲骨文DB引擎的奇怪行为呢?

EN

回答 1

Database Administration用户

发布于 2018-02-15 17:10:47

原因是基于成本的优化器在内存中有一个来自先前选择的计划,其中给定组织的记录数量(即'LOL‘)要小得多,大约为14000。当计划在内存中时,CBO不再关心参数值。使用:

代码语言:javascript
复制
WHERE organization || '' = 'BA'
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/198028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档