oracle11gr2用rownum在分页时执行计划出现异常,无结果集返回?

近期更换了数据库版本,把oracle10g替换成11g2r出现了一个问题,一些原本可以运行的分页sql数据获取没有了结果集反馈,测试后发现产生的条件是:-1,select中包含rownum-2.where条件中包含两个区间一致的查询日期条件比如AND l.be_starttime >= trunc(SYSDATE, 'yy')AND l...显示全部

近期更换了数据库版本,把oracle10g替换成11g2r
出现了一个问题,一些原本可以运行的分页sql数据获取没有了结果集反馈,测试后发现产生的条件是:
-1,select中包含rownum
-2.where条件中包含两个区间一致的查询日期条件比如
AND l.be_starttime >= trunc(SYSDATE, 'yy')
AND l.be_starttime >= to_date('2019-08-01', 'yyyy-mm-dd')
两个条件同时存在时会在执行计划中出现一个   2 - filter(NULL IS NOT NULL)
具体实例sql:

SELECT l.activityarr,ROWNUM
          FROM crm_lead l
         WHERE l.isactive = 'Y'
           AND l.ad_org_id = 1000000
           AND l.docstatus = 'I'
           AND l.be_starttime >= trunc(SYSDATE, 'yy')
           AND l.be_starttime >= to_date('2019-08-01', 'yyyy-mm-dd');

该sql的执行计划:

Plan hash value: 2923278655
 
--------------------------------------------------------------------------------------------------
| Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
--------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |          |     1 |    18 |     0   (0)|          |       |       |
|   1 |  COUNT                |          |       |       |            |          |       |       |
|*  2 |   FILTER              |          |       |       |            |          |       |       |
|   3 |    PARTITION RANGE ALL|          |  3887 | 69966 |  7956   (1)| 00:01:36 |     1 |     4 |
|*  4 |     TABLE ACCESS FULL | CRM_LEAD |  3887 | 69966 |  7956   (1)| 00:01:36 |     1 |     4 |
--------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - filter(NULL IS NOT NULL)
   4 - filter("L"."DOCSTATUS"=U'I' AND "L"."AD_ORG_ID"=1000000 AND "L"."ISACTIVE"='Y')

求助这个问题能怎么处理?具体产生原因是什么呢?

收起
参与7

查看其它 1 个回答星陨无痕的回答

星陨无痕星陨无痕技术经理北京世纪东方国际旅行社

问题已经处理.
没找到原理,但是找到了发生的原因;
产生该问题的条件是,查询字段中的条件字段设置了正向和反向两个索引
在10g的时候没有任何问题,11g的时候如果设置了正向和反向两个索引并且再select中加rownum执行计划里面就会出现坑爹的filter(null is not null) 
处理方法我把反向索引删除只保留正向索引,一切正常了..完事大吉..
希望未来碰到这个坑的人能看到我这个问题和答案..

旅游 · 2019-08-09
浏览1683

回答者

星陨无痕
技术经理北京世纪东方国际旅行社
擅长领域: Linux关系型数据库服务器

星陨无痕 最近回答过的问题

回答状态

  • 发布时间:2019-08-09
  • 关注会员:2 人
  • 回答浏览:1683
  • X社区推广