10053 trace 优化 sql 还是有点用

好久不写博客了,一来是个人比较懒,二来是帮别人优化sql之后不喜欢收集案例,三则是有些经典优化案例客户不方便发。最近遇到一个有点坑爹的sql优化案例,我觉得非常

有必要分享给大家。废话不多说,SQL如下:

select *
  from (select z_results.*, rownum autorowno
          from (select /*+first_rows(20)*/
                 A.dd_id,
                 A.ysje,
                 A.ssje,
                 A.xjbz,
                 to_char(A.lrsj, 'yyyy-mm-dd') as lrsj,
                 a.kh_id,
                 a.jbr_id,
                 to_char(A.zxkprq, 'yyyy-mm-dd') as zxkprq,
                 a.khlx,
                 A.ddlx,
                 A.kpzt,
                 A.skzt,
                 A.fzgs_dm,
                 case
                   when a.JSDKJZT = '1' then
                    case
                      when (select sum(h.fpje)
                              from (select f.fpje, g.kppj_id
                                      from pjkgl_fpxx f, pjkgl_pjglxx g
                                     where f.fp_id = g.fp_id
                                       and g.zxfs = '1'
                                       and f.pjlx = '2'
                                       and f.zfbz = '0'
                                    union all
                                    select f.fpje, g.kppj_id
                                      from PJKGL_FPXX_DISABLED f, pjkgl_pjglxx g
                                     where f.fp_id = g.fp_id
                                       and g.zxfs = '1'
                                       and f.pjlx = '2'
                                       and f.zfbz = '0') h
                             where h.kppj_id = a.dd_id) is null then
                       0
                      else
                       (select sum(fpje)
                          from (select f.fpje, g.kppj_id
                                  from pjkgl_fpxx f, pjkgl_pjglxx g
                                 where f.fp_id = g.fp_id
                                   and g.zxfs = '1'
                                   and f.pjlx = '2'
                                   and f.zfbz = '0'
                                union all
                                select f.fpje, g.kppj_id
                                  from PJKGL_FPXX_DISABLED f, pjkgl_pjglxx g
                                 where f.fp_id = g.fp_id
                                   and g.zxfs = '1'
                                   and f.pjlx = '2'
                                   and f.zfbz = '0') h
                         where h.kppj_id = a.dd_id)
                    end
                   else
                    case
                      when (select sum(fpje)
                              from (select f.fpje, g.kppj_id
                                      from pjkgl_fpxx f, pjkgl_pjglxx g
                                     where f.fp_id = g.fp_id
                                       and g.zxfs = '1'
                                       and f.pjlx = '1'
                                       and f.zfbz = '0'
                                    union all
                                    select f.fpje, g.kppj_id
                                      from PJKGL_FPXX_DISABLED f, pjkgl_pjglxx g
                                     where f.fp_id = g.fp_id
                                       and g.zxfs = '1'
                                       and f.pjlx = '1'
                                       and f.zfbz = '0') h
                             where h.kppj_id = a.dd_id) is null then
                       0
                      else
                       (select sum(fpje)
                          from (select f.fpje, g.kppj_id
                                  from pjkgl_fpxx f, pjkgl_pjglxx g
                                 where f.fp_id = g.fp_id
                                   and g.zxfs = '1'
                                   and f.pjlx = '1'
                                   and f.zfbz = '0'
                                union all
                                select f.fpje, g.kppj_id
                                  from PJKGL_FPXX_DISABLED f, pjkgl_pjglxx g
                                 where f.fp_id = g.fp_id
                                   and g.zxfs = '1'
                                   and f.pjlx = '1'
                                   and f.zfbz = '0') h
                         where h.kppj_id = a.dd_id)
                    end
                 end as kpje,
                 a.JSDKJZT,
                 a.xsfs
                  from swgl_ddjbxx a
                 WHERE a.zfbz = '0'
                   and (a.ysje > 0 or a.ysje < 0 or
                       (a.ysje = 0 and a.kpzt = '3'))
                   and (a.ZXKPRQ >=
                       to_date('2014-10-05 00:00:00',
                                'YYYY-MM-DD HH24:MI:SS') or
                       a.KJJSDSJ >=
                       to_date('2014-10-05 00:00:00',
                                'YYYY-MM-DD HH24:MI:SS'))
                   and (a.ZXKPRQ <=
                       to_date('2014-11-05 23:59:59',
                                'YYYY-MM-DD HH24:MI:SS') or
                       a.KJJSDSJ <=
                       to_date('2014-11-05 23:59:59',
                                'YYYY-MM-DD HH24:MI:SS'))
                   and (a.XJBZ = '9999')
                   and (((a.ddlx in ('0', '2') and a.ddzt = '12') or
                       (a.ddlx = '1' and a.ddzt in ('04', '99'))))
                   and (a.XSJGFZGS_DM = '001081')
                   and (exists
                        (select 1
                           from swgl_ddhjxx hj
                          where hj.dd_id = a.dd_id
                            and (hj.hjlx = '03' or hj.hjlx = '06' or
                                hj.hjlx = '07' or hj.hjlx = '08' or
                                hj.hjlx = '09')
                            and hj.JBR_ID = '9F923C36CF0BA0DCA76A5F30D642A75C'))
                 order by zxkprq desc, dd_id desc) z_results
         where rownum <= 20)
 where autorowno >= 1;
 
 Execution Plan
----------------------------------------------------------
Plan hash value: 786935727

--------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                       | Name                   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                                |                        |     1 |   173 |    25   (4)| 00:00:01 |
|   1 |  SORT AGGREGATE                                 |                        |     1 |    40 |            |          |
|   2 |   VIEW                                          |                        |     6 |   240 |    20   (0)| 00:00:01 |
|   3 |    UNION-ALL                                    |                        |       |       |            |          |
|   4 |     NESTED LOOPS                                |                        |       |       |            |          |
|   5 |      NESTED LOOPS                               |                        |     3 |   153 |     9   (0)| 00:00:01 |
|*  6 |       TABLE ACCESS BY INDEX ROWID               | PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|*  7 |        INDEX RANGE SCAN                         | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|*  8 |       INDEX UNIQUE SCAN                         | PK_PJKGL_FPXX          |     1 |       |     1   (0)| 00:00:01 |
|*  9 |      TABLE ACCESS BY INDEX ROWID                | PJKGL_FPXX             |     1 |    25 |     2   (0)| 00:00:01 |
|  10 |     NESTED LOOPS                                |                        |       |       |            |          |
|  11 |      NESTED LOOPS                               |                        |     3 |   153 |    11   (0)| 00:00:01 |
|* 12 |       TABLE ACCESS BY INDEX ROWID               | PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 13 |        INDEX RANGE SCAN                         | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 14 |       INDEX UNIQUE SCAN                         | PK_PJKGL_FPXX_DISABLED |     1 |       |     1   (0)| 00:00:01 |
|* 15 |      TABLE ACCESS BY INDEX ROWID                | PJKGL_FPXX_DISABLED    |     1 |    25 |     2   (0)| 00:00:01 |
|  16 |       SORT AGGREGATE                            |                        |     1 |    40 |            |          |
|  17 |        VIEW                                     |                        |     6 |   240 |    20   (0)| 00:00:01 |
|  18 |         UNION-ALL                               |                        |       |       |            |          |
|  19 |          NESTED LOOPS                           |                        |       |       |            |          |
|  20 |           NESTED LOOPS                          |                        |     3 |   153 |     9   (0)| 00:00:01 |
|* 21 |            TABLE ACCESS BY INDEX ROWID          | PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 22 |             INDEX RANGE SCAN                    | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 23 |            INDEX UNIQUE SCAN                    | PK_PJKGL_FPXX          |     1 |       |     1   (0)| 00:00:01 |
|* 24 |           TABLE ACCESS BY INDEX ROWID           | PJKGL_FPXX             |     1 |    25 |     2   (0)| 00:00:01 |
|  25 |          NESTED LOOPS                           |                        |       |       |            |          |
|  26 |           NESTED LOOPS                          |                        |     3 |   153 |    11   (0)| 00:00:01 |
|* 27 |            TABLE ACCESS BY INDEX ROWID          | PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 28 |             INDEX RANGE SCAN                    | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 29 |            INDEX UNIQUE SCAN                    | PK_PJKGL_FPXX_DISABLED |     1 |       |     1   (0)| 00:00:01 |
|* 30 |           TABLE ACCESS BY INDEX ROWID           | PJKGL_FPXX_DISABLED    |     1 |    25 |     2   (0)| 00:00:01 |
|  31 |            SORT AGGREGATE                       |                        |     1 |    40 |            |          |
|  32 |             VIEW                                |                        |     6 |   240 |    20   (0)| 00:00:01 |
|  33 |              UNION-ALL                          |                        |       |       |            |          |
|  34 |               NESTED LOOPS                      |                        |       |       |            |          |
|  35 |                NESTED LOOPS                     |                        |     3 |   153 |     9   (0)| 00:00:01 |
|* 36 |                 TABLE ACCESS BY INDEX ROWID     | PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 37 |                  INDEX RANGE SCAN               | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 38 |                 INDEX UNIQUE SCAN               | PK_PJKGL_FPXX          |     1 |       |     1   (0)| 00:00:01 |
|* 39 |                TABLE ACCESS BY INDEX ROWID      | PJKGL_FPXX             |     1 |    25 |     2   (0)| 00:00:01 |
|  40 |               NESTED LOOPS                      |                        |       |       |            |          |
|  41 |                NESTED LOOPS                     |                        |     3 |   153 |    11   (0)| 00:00:01 |
|* 42 |                 TABLE ACCESS BY INDEX ROWID     | PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 43 |                  INDEX RANGE SCAN               | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 44 |                 INDEX UNIQUE SCAN               | PK_PJKGL_FPXX_DISABLED |     1 |       |     1   (0)| 00:00:01 |
|* 45 |                TABLE ACCESS BY INDEX ROWID      | PJKGL_FPXX_DISABLED    |     1 |    25 |     2   (0)| 00:00:01 |
|  46 |                 SORT AGGREGATE                  |                        |     1 |    40 |            |          |
|  47 |                  VIEW                           |                        |     6 |   240 |    20   (0)| 00:00:01 |
|  48 |                   UNION-ALL                     |                        |       |       |            |          |
|  49 |                    NESTED LOOPS                 |                        |       |       |            |          |
|  50 |                     NESTED LOOPS                |                        |     3 |   153 |     9   (0)| 00:00:01 |
|* 51 |                      TABLE ACCESS BY INDEX ROWID| PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 52 |                       INDEX RANGE SCAN          | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 53 |                      INDEX UNIQUE SCAN          | PK_PJKGL_FPXX          |     1 |       |     1   (0)| 00:00:01 |
|* 54 |                     TABLE ACCESS BY INDEX ROWID | PJKGL_FPXX             |     1 |    25 |     2   (0)| 00:00:01 |
|  55 |                    NESTED LOOPS                 |                        |       |       |            |          |
|  56 |                     NESTED LOOPS                |                        |     3 |   153 |    11   (0)| 00:00:01 |
|* 57 |                      TABLE ACCESS BY INDEX ROWID| PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 58 |                       INDEX RANGE SCAN          | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 59 |                      INDEX UNIQUE SCAN          | PK_PJKGL_FPXX_DISABLED |     1 |       |     1   (0)| 00:00:01 |
|* 60 |                     TABLE ACCESS BY INDEX ROWID | PJKGL_FPXX_DISABLED    |     1 |    25 |     2   (0)| 00:00:01 |
|* 61 |  VIEW                                           |                        |     1 |   173 |    25   (4)| 00:00:01 |
|* 62 |   COUNT STOPKEY                                 |                        |       |       |            |          |
|  63 |    VIEW                                         |                        |     1 |   160 |    25   (4)| 00:00:01 |
|* 64 |     SORT ORDER BY STOPKEY                       |                        |     1 |   177 |    25   (4)| 00:00:01 |
|  65 |      NESTED LOOPS SEMI                          |                        |     1 |   177 |    24   (0)| 00:00:01 |
|* 66 |       TABLE ACCESS BY INDEX ROWID               | SWGL_DDJBXX            |     1 |   127 |    19   (0)| 00:00:01 |
|* 67 |        INDEX RANGE SCAN                         | IDX_SWGL_DDJBXX_XJBZ   |    39 |       |     3   (0)| 00:00:01 |
|* 68 |       TABLE ACCESS BY INDEX ROWID               | SWGL_DDHJXX            |  1077 | 53850 |     5   (0)| 00:00:01 |
|* 69 |        INDEX RANGE SCAN                         | IDX_SWGL_DDHJXX_DDID   |     2 |       |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   6 - filter("G"."ZXFS"='1')
   7 - access("G"."KPPJ_ID"=:B1)
   8 - access("F"."FP_ID"="G"."FP_ID")
   9 - filter("F"."PJLX"='2' AND "F"."ZFBZ"='0')
  12 - filter("G"."ZXFS"='1')
  13 - access("G"."KPPJ_ID"=:B1)
  14 - access("F"."FP_ID"="G"."FP_ID")
  15 - filter("F"."PJLX"='2' AND "F"."ZFBZ"='0')
  21 - filter("G"."ZXFS"='1')
  22 - access("G"."KPPJ_ID"=:B1)
  23 - access("F"."FP_ID"="G"."FP_ID")
  24 - filter("F"."PJLX"='2' AND "F"."ZFBZ"='0')
  27 - filter("G"."ZXFS"='1')
  28 - access("G"."KPPJ_ID"=:B1)
  29 - access("F"."FP_ID"="G"."FP_ID")
  30 - filter("F"."PJLX"='2' AND "F"."ZFBZ"='0')
  36 - filter("G"."ZXFS"='1')
  37 - access("G"."KPPJ_ID"=:B1)
  38 - access("F"."FP_ID"="G"."FP_ID")
  39 - filter("F"."PJLX"='1' AND "F"."ZFBZ"='0')
  42 - filter("G"."ZXFS"='1')
  43 - access("G"."KPPJ_ID"=:B1)
  44 - access("F"."FP_ID"="G"."FP_ID")
  45 - filter("F"."PJLX"='1' AND "F"."ZFBZ"='0')
  51 - filter("G"."ZXFS"='1')
  52 - access("G"."KPPJ_ID"=:B1)
  53 - access("F"."FP_ID"="G"."FP_ID")
  54 - filter("F"."PJLX"='1' AND "F"."ZFBZ"='0')
  57 - filter("G"."ZXFS"='1')
  58 - access("G"."KPPJ_ID"=:B1)
  59 - access("F"."FP_ID"="G"."FP_ID")
  60 - filter("F"."PJLX"='1' AND "F"."ZFBZ"='0')
  61 - filter("AUTOROWNO">=21)
  62 - filter(ROWNUM<=40)
  64 - filter(ROWNUM<=40)
  66 - filter(("A"."ZXKPRQ">=TO_DATE(' 2014-10-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss') OR
              "A"."KJJSDSJ">=TO_DATE(' 2014-10-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss')) AND ("A"."ZXKPRQ"<=TO_DATE(' 2014-11-05
              23:59:59', 'syyyy-mm-dd hh24:mi:ss') OR "A"."KJJSDSJ"<=TO_DATE(' 2014-11-05 23:59:59', 'syyyy-mm-dd hh24:mi:ss'))
              AND "A"."XSJGFZGS_DM"='001097' AND "A"."DDZT"='12' AND "A"."ZFBZ"='0' AND ("A"."DDLX"='0' OR "A"."DDLX"='2') AND
              ("A"."YSJE"<>0 OR "A"."YSJE"=0 AND "A"."KPZT"='3'))
  67 - access("A"."XJBZ"='9999')
  68 - filter("HJ"."JBR_ID"='649013B54CF555D3E4A7A1980F7854B3' AND ("HJ"."HJLX"='03' OR "HJ"."HJLX"='06' OR
              "HJ"."HJLX"='07' OR "HJ"."HJLX"='08' OR "HJ"."HJLX"='09'))
  69 - access("HJ"."DD_ID"="A"."DD_ID")


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
    2115589  consistent gets
         38  physical reads
        364  redo size
       1405  bytes sent via SQL*Net to client
        509  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
          0  rows processed
          


这个sql是一个分页语句,取第一页,逻辑读 2115589 ,200w的逻辑读,肯定不能接受。这个sql是一个税务局的sql,国企的大爷们,sql跑得慢点其实无所谓,顶多老子出去抽

根烟回来再看。可是我们dba心里过意不去啊,200w逻辑读,要跑10多秒,反正看不惯它。如果并发多了,跑得更久了。这种sql就是祸害。


分页语句, 不管那一页 返回数据都很少,这里又是第一页,很明显,应该让这个sql 走嵌套循环(返回数据少不走这个走啥?) 走嵌套循环你得选定驱动表,驱动表一般就是

order by 的表,如果 order by 2个表,那去死吧,无法优化(当然了,你可以搞物化视图,再在mv上面创建 order by 的索引) 这个sql还好 order by 是一个表的条件

order by zxkprq desc, dd_id desc 那么,很明显,就在 这2个例建立组合索引,然后 走index full scan desc 扫描20条数据就停止。于是创建了一个索引


 create index idx_sb on swgl_ddjbxx(zxkprq,dd_id) nologging online parallel 4 ;


然后加了一个hint index_desc(a idx_sb) ,索引是 走了 而且确实是走的 index full scan desc ,但是 他妈的, 居然里面有 sort order by。索引本来就是有序的啊, 都走了

index full scan desc 他妈的 还去 sort order by 那 跑得快个毛 ,建立索引反而跑更慢了。 这不科学啊,你大爷的 ,哥优化这么多sql 还没遇到这种怪事,我本来很不喜欢

10053 trace, 也不喜欢 10046 trace,但是 有时候 不用还真解决不了问题。 于是让兄弟搞个测试表,然后写了一个sql模拟上面情况,再做一个10053 trace ,看一下为啥 还有

 sort order by 。关键的 10053 trace 代码如下:


Final query after transformations:******* UNPARSED QUERY IS *******
SELECT "from$_subquery$_001"."DD_ID" "DD_ID","from$_subquery$_001"."YSJE" "YSJE","from$_subquery$_001"."SSJE" "SSJE","from$_subquery$_001"."XJBZ" "XJBZ","from$_subquery$_001"."LRSJ" "LRSJ","from$_subquery$_001"."KH_ID" "KH_ID",
"from$_subquery$_001"."JBR_ID" "JBR_ID","from$_subquery$_001"."ZXKPRQ" "ZXKPRQ","from$_subquery$_001"."KHLX" "KHLX","from$_subquery$_001"."DDLX" "DDLX","from$_subquery$_001"."KPZT" "KPZT","from$_subquery$_001"."SKZT" "SKZT","from$_subquery$_001"."FZGS_DM" "FZGS_DM" 
FROM  (SELECT /*+ INDEX_DESC ("A" "IDX_TEST_1") */ "A"."DD_ID" "DD_ID","A"."YSJE" "YSJE","A"."SSJE" "SSJE","A"."XJBZ" "XJBZ",TO_CHAR("A"."LRSJ",'yyyy-mm-dd') "LRSJ","A"."KH_ID" "KH_ID","A"."JBR_ID" "JBR_ID",TO_CHAR("A"."ZXKPRQ",'yyyy-mm-dd') "ZXKPRQ","A"."KHLX" "KHLX",
"A"."DDLX" "DDLX","A"."KPZT" "KPZT","A"."SKZT" "SKZT","A"."FZGS_DM" "FZGS_DM" FROM "NBGL2"."TEST1" "A" WHERE "A"."ZXKPRQ">=TO_DATE(' 2014-10-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss') ORDER BY TO_CHAR("A"."ZXKPRQ",'yyyy-mm-dd') DESC) "from$_subquery$_001" WHERE ROWNUM<=20


看最后面, sql最终被翻译为  ................. order by to_char(a.zxkprq,'yyyy-mm-dd') desc  , 但是 我原始的sql是 直接的 order by a.zxkprq 。卧槽 优化器 SB了。 这个问题我不

想管了, 要么表 里面 数据格式不对,要么是 某个参数 被改了, 但是 这个问题 我不想继续搞了,难得去搞。于是创建了下面的索引:


 create index idx_bigsb on swgl_ddjbxx(to_char(zxkprq,'yyyy-mm-dd'),dd_id) nologging online parallel 4 ;


最终确实是走了索引, 而且没有sort order by 了, 但是 逻辑读更大了,之前200w ,现在妈的 1000w多了。这是为啥呢? 哦草,原来忘记了, 这个sql返回0条记录。我草,这

个sql返回0条记录,那不就是相当于取分页语句里面最后一页? 意思就是说 要 index full scan desc 把整个索引叶子块全扫描了,而且还得回表! 卧槽,这是最垃圾的执行计

划。于是变更思路,这个sql不是有个 exists吗? 我们来看 exists 返回多少记录,我跑了一下,返回1w左右。 from 之后的主表 有 上千万条数据。 好的 ,那思路来了,就让

 exists 去驱动主表吧。于是sql 改写为下面:


SQL> set autot trace
SQL> select *
  2    from (select z_results.*, rownum autorowno
  3            from (select /*+ first_rows  LEADING("HJ"@"SB") no_expand */
  4                   A.dd_id,
  5                   A.ysje,
  6                   A.ssje,
  7                   A.xjbz,
  8                   to_char(A.lrsj, 'yyyy-mm-dd') as lrsj,
  9                   a.kh_id,
 10                   a.jbr_id,
 11                   to_char(A.zxkprq, 'yyyy-mm-dd') as zxkprq,
 12                   a.khlx,
 13                   A.ddlx,
 14                   A.kpzt,
 15                   A.skzt,
 16                   A.fzgs_dm,
 17                   case
 18                     when a.JSDKJZT = '1' then
 19                      case
 20                        when (select sum(h.fpje)
 21                                from (select f.fpje, g.kppj_id
 22                                        from pjkgl_fpxx f, pjkgl_pjglxx g
 23                                       where f.fp_id = g.fp_id
 24                                         and g.zxfs = '1'
 25                                         and f.pjlx = '2'
 26                                         and f.zfbz = '0'
 27                                      union all
 28                                      select f.fpje, g.kppj_id
 29                                        from PJKGL_FPXX_DISABLED f, pjkgl_pjglxx g
 30                                       where f.fp_id = g.fp_id
 31                                         and g.zxfs = '1'
 32                                         and f.pjlx = '2'
 33                                         and f.zfbz = '0') h
 34                               where h.kppj_id = a.dd_id) is null then
 35                         0
 36                        else
 37                         (select sum(fpje)
 38                            from (select f.fpje, g.kppj_id
 39                                    from pjkgl_fpxx f, pjkgl_pjglxx g
 40                                   where f.fp_id = g.fp_id
 41                                     and g.zxfs = '1'
 42                                     and f.pjlx = '2'
 43                                     and f.zfbz = '0'
 44                                  union all
 45                                  select f.fpje, g.kppj_id
 46                                    from PJKGL_FPXX_DISABLED f, pjkgl_pjglxx g
 47                                   where f.fp_id = g.fp_id
 48                                     and g.zxfs = '1'
 49                                     and f.pjlx = '2'
 50                                     and f.zfbz = '0') h
 51                           where h.kppj_id = a.dd_id)
 52                      end
 53                     else
 54                      case
 55                        when (select sum(fpje)
 56                                from (select f.fpje, g.kppj_id
 57                                        from pjkgl_fpxx f, pjkgl_pjglxx g
 58                                       where f.fp_id = g.fp_id
 59                                         and g.zxfs = '1'
 60                                         and f.pjlx = '1'
 61                                         and f.zfbz = '0'
 62                                      union all
 63                                      select f.fpje, g.kppj_id
 64                                        from PJKGL_FPXX_DISABLED f, pjkgl_pjglxx g
 65                                       where f.fp_id = g.fp_id
 66                                         and g.zxfs = '1'
 67                                         and f.pjlx = '1'
 68                                         and f.zfbz = '0') h
 69                               where h.kppj_id = a.dd_id) is null then
 70                         0
 71                        else
 72                         (select sum(fpje)
 73                            from (select f.fpje, g.kppj_id
 74                                    from pjkgl_fpxx f, pjkgl_pjglxx g
 75                                   where f.fp_id = g.fp_id
 76                                     and g.zxfs = '1'
 77                                     and f.pjlx = '1'
 78                                     and f.zfbz = '0'
 79                                  union all
 80                                  select f.fpje, g.kppj_id
 81                                    from PJKGL_FPXX_DISABLED f, pjkgl_pjglxx g
 82                                   where f.fp_id = g.fp_id
 83                                     and g.zxfs = '1'
 84                                     and f.pjlx = '1'
 85                                     and f.zfbz = '0') h
 86                           where h.kppj_id = a.dd_id)
 87                      end
 88                   end as kpje,
 89                   a.JSDKJZT,
 90                   a.xsfs
 91                    from swgl_ddjbxx a
 92                   WHERE a.zfbz = '0'
 93                     and (a.ysje > 0 or a.ysje < 0 or
 94                         (a.ysje = 0 and a.kpzt = '3'))
 95                     and (a.ZXKPRQ >=
 96                         to_date('2014-10-05 00:00:00',
 97                                  'YYYY-MM-DD HH24:MI:SS') or
 98                         a.KJJSDSJ >=
 99                         to_date('2014-10-05 00:00:00',
100                                  'YYYY-MM-DD HH24:MI:SS'))
101                     and (a.ZXKPRQ <=
102                         to_date('2014-11-05 23:59:59',
103                                  'YYYY-MM-DD HH24:MI:SS') or
104                         a.KJJSDSJ <=
105                         to_date('2014-11-05 23:59:59',
106                                  'YYYY-MM-DD HH24:MI:SS'))
107                     and (a.XJBZ = '9999')
108                     and (((a.ddlx in ('0', '2') and a.ddzt = '12') or
109                         (a.ddlx = '1' and a.ddzt in ('04', '99'))))
110                     and (a.XSJGFZGS_DM = '001081')
111                     and (a.dd_id in (select /*+ qb_name(sb) */ dd_id
112      from swgl_ddhjxx hj
113     where (hj.hjlx = '03' or hj.hjlx = '06' or hj.hjlx = '07' or
114           hj.hjlx = '08' or hj.hjlx = '09')
115       and hj.JBR_ID = '9F923C36CF0BA0DCA76A5F30D642A75C'))
116                   order by zxkprq desc, dd_id desc) z_results
117           where rownum <= 20)
118   where autorowno >= 1;

no rows selected


Execution Plan
----------------------------------------------------------
Plan hash value: 4195696224

--------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                       | Name                   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                                |                        |     1 |   173 |  3323   (1)| 00:00:40 |
|   1 |  SORT AGGREGATE                                 |                        |     1 |    40 |            |          |
|   2 |   VIEW                                          |                        |     6 |   240 |    20   (0)| 00:00:01 |
|   3 |    UNION-ALL                                    |                        |       |       |            |          |
|   4 |     NESTED LOOPS                                |                        |       |       |            |          |
|   5 |      NESTED LOOPS                               |                        |     3 |   153 |     9   (0)| 00:00:01 |
|*  6 |       TABLE ACCESS BY INDEX ROWID               | PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|*  7 |        INDEX RANGE SCAN                         | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|*  8 |       INDEX UNIQUE SCAN                         | PK_PJKGL_FPXX          |     1 |       |     1   (0)| 00:00:01 |
|*  9 |      TABLE ACCESS BY INDEX ROWID                | PJKGL_FPXX             |     1 |    25 |     2   (0)| 00:00:01 |
|  10 |     NESTED LOOPS                                |                        |       |       |            |          |
|  11 |      NESTED LOOPS                               |                        |     3 |   153 |    11   (0)| 00:00:01 |
|* 12 |       TABLE ACCESS BY INDEX ROWID               | PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 13 |        INDEX RANGE SCAN                         | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 14 |       INDEX UNIQUE SCAN                         | PK_PJKGL_FPXX_DISABLED |     1 |       |     1   (0)| 00:00:01 |
|* 15 |      TABLE ACCESS BY INDEX ROWID                | PJKGL_FPXX_DISABLED    |     1 |    25 |     2   (0)| 00:00:01 |
|  16 |       SORT AGGREGATE                            |                        |     1 |    40 |            |          |
|  17 |        VIEW                                     |                        |     6 |   240 |    20   (0)| 00:00:01 |
|  18 |         UNION-ALL                               |                        |       |       |            |          |
|  19 |          NESTED LOOPS                           |                        |       |       |            |          |
|  20 |           NESTED LOOPS                          |                        |     3 |   153 |     9   (0)| 00:00:01 |
|* 21 |            TABLE ACCESS BY INDEX ROWID          | PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 22 |             INDEX RANGE SCAN                    | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 23 |            INDEX UNIQUE SCAN                    | PK_PJKGL_FPXX          |     1 |       |     1   (0)| 00:00:01 |
|* 24 |           TABLE ACCESS BY INDEX ROWID           | PJKGL_FPXX             |     1 |    25 |     2   (0)| 00:00:01 |
|  25 |          NESTED LOOPS                           |                        |       |       |            |          |
|  26 |           NESTED LOOPS                          |                        |     3 |   153 |    11   (0)| 00:00:01 |
|* 27 |            TABLE ACCESS BY INDEX ROWID          | PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 28 |             INDEX RANGE SCAN                    | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 29 |            INDEX UNIQUE SCAN                    | PK_PJKGL_FPXX_DISABLED |     1 |       |     1   (0)| 00:00:01 |
|* 30 |           TABLE ACCESS BY INDEX ROWID           | PJKGL_FPXX_DISABLED    |     1 |    25 |     2   (0)| 00:00:01 |
|  31 |            SORT AGGREGATE                       |                        |     1 |    40 |            |          |
|  32 |             VIEW                                |                        |     6 |   240 |    20   (0)| 00:00:01 |
|  33 |              UNION-ALL                          |                        |       |       |            |          |
|  34 |               NESTED LOOPS                      |                        |       |       |            |          |
|  35 |                NESTED LOOPS                     |                        |     3 |   153 |     9   (0)| 00:00:01 |
|* 36 |                 TABLE ACCESS BY INDEX ROWID     | PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 37 |                  INDEX RANGE SCAN               | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 38 |                 INDEX UNIQUE SCAN               | PK_PJKGL_FPXX          |     1 |       |     1   (0)| 00:00:01 |
|* 39 |                TABLE ACCESS BY INDEX ROWID      | PJKGL_FPXX             |     1 |    25 |     2   (0)| 00:00:01 |
|  40 |               NESTED LOOPS                      |                        |       |       |            |          |
|  41 |                NESTED LOOPS                     |                        |     3 |   153 |    11   (0)| 00:00:01 |
|* 42 |                 TABLE ACCESS BY INDEX ROWID     | PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 43 |                  INDEX RANGE SCAN               | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 44 |                 INDEX UNIQUE SCAN               | PK_PJKGL_FPXX_DISABLED |     1 |       |     1   (0)| 00:00:01 |
|* 45 |                TABLE ACCESS BY INDEX ROWID      | PJKGL_FPXX_DISABLED    |     1 |    25 |     2   (0)| 00:00:01 |
|  46 |                 SORT AGGREGATE                  |                        |     1 |    40 |            |          |
|  47 |                  VIEW                           |                        |     6 |   240 |    20   (0)| 00:00:01 |
|  48 |                   UNION-ALL                     |                        |       |       |            |          |
|  49 |                    NESTED LOOPS                 |                        |       |       |            |          |
|  50 |                     NESTED LOOPS                |                        |     3 |   153 |     9   (0)| 00:00:01 |
|* 51 |                      TABLE ACCESS BY INDEX ROWID| PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 52 |                       INDEX RANGE SCAN          | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 53 |                      INDEX UNIQUE SCAN          | PK_PJKGL_FPXX          |     1 |       |     1   (0)| 00:00:01 |
|* 54 |                     TABLE ACCESS BY INDEX ROWID | PJKGL_FPXX             |     1 |    25 |     2   (0)| 00:00:01 |
|  55 |                    NESTED LOOPS                 |                        |       |       |            |          |
|  56 |                     NESTED LOOPS                |                        |     3 |   153 |    11   (0)| 00:00:01 |
|* 57 |                      TABLE ACCESS BY INDEX ROWID| PJKGL_PJGLXX           |     3 |    78 |     5   (0)| 00:00:01 |
|* 58 |                       INDEX RANGE SCAN          | IDX_PJKGL_PJGLXX_PJID  |     3 |       |     4   (0)| 00:00:01 |
|* 59 |                      INDEX UNIQUE SCAN          | PK_PJKGL_FPXX_DISABLED |     1 |       |     1   (0)| 00:00:01 |
|* 60 |                     TABLE ACCESS BY INDEX ROWID | PJKGL_FPXX_DISABLED    |     1 |    25 |     2   (0)| 00:00:01 |
|* 61 |  VIEW                                           |                        |     1 |   173 |  3323   (1)| 00:00:40 |
|* 62 |   COUNT STOPKEY                                 |                        |       |       |            |          |
|  63 |    VIEW                                         |                        |     1 |   160 |  3323   (1)| 00:00:40 |
|* 64 |     SORT ORDER BY STOPKEY                       |                        |     1 |   184 |  3323   (1)| 00:00:40 |
|  65 |      NESTED LOOPS                               |                        |       |       |            |          |
|  66 |       NESTED LOOPS                              |                        |     1 |   184 |  3322   (1)| 00:00:40 |
|  67 |        SORT UNIQUE                              |                        |  1078 | 53900 |  1637   (1)| 00:00:20 |
|* 68 |         TABLE ACCESS BY INDEX ROWID             | SWGL_DDHJXX            |  1078 | 53900 |  1637   (1)| 00:00:20 |
|* 69 |          INDEX RANGE SCAN                       | IDX_SWGL_DDHJXX_JBRID  |  5632 |       |    50   (0)| 00:00:01 |
|* 70 |        INDEX UNIQUE SCAN                        | PK_SWGL_DDJBXX         |     1 |       |     2   (0)| 00:00:01 |
|* 71 |       TABLE ACCESS BY INDEX ROWID               | SWGL_DDJBXX            |     1 |   134 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   6 - filter("G"."ZXFS"='1')
   7 - access("G"."KPPJ_ID"=:B1)
   8 - access("F"."FP_ID"="G"."FP_ID")
   9 - filter("F"."PJLX"='2' AND "F"."ZFBZ"='0')
  12 - filter("G"."ZXFS"='1')
  13 - access("G"."KPPJ_ID"=:B1)
  14 - access("F"."FP_ID"="G"."FP_ID")
  15 - filter("F"."PJLX"='2' AND "F"."ZFBZ"='0')
  21 - filter("G"."ZXFS"='1')
  22 - access("G"."KPPJ_ID"=:B1)
  23 - access("F"."FP_ID"="G"."FP_ID")
  24 - filter("F"."PJLX"='2' AND "F"."ZFBZ"='0')
  27 - filter("G"."ZXFS"='1')
  28 - access("G"."KPPJ_ID"=:B1)
  29 - access("F"."FP_ID"="G"."FP_ID")
  30 - filter("F"."PJLX"='2' AND "F"."ZFBZ"='0')
  36 - filter("G"."ZXFS"='1')
  37 - access("G"."KPPJ_ID"=:B1)
  38 - access("F"."FP_ID"="G"."FP_ID")
  39 - filter("F"."PJLX"='1' AND "F"."ZFBZ"='0')
  42 - filter("G"."ZXFS"='1')
  43 - access("G"."KPPJ_ID"=:B1)
  44 - access("F"."FP_ID"="G"."FP_ID")
  45 - filter("F"."PJLX"='1' AND "F"."ZFBZ"='0')
  51 - filter("G"."ZXFS"='1')
  52 - access("G"."KPPJ_ID"=:B1)
  53 - access("F"."FP_ID"="G"."FP_ID")
  54 - filter("F"."PJLX"='1' AND "F"."ZFBZ"='0')
  57 - filter("G"."ZXFS"='1')
  58 - access("G"."KPPJ_ID"=:B1)
  59 - access("F"."FP_ID"="G"."FP_ID")
  60 - filter("F"."PJLX"='1' AND "F"."ZFBZ"='0')
  61 - filter("AUTOROWNO">=1)
  62 - filter(ROWNUM<=20)
  64 - filter(ROWNUM<=20)
  68 - filter("HJ"."HJLX"='03' OR "HJ"."HJLX"='06' OR "HJ"."HJLX"='07' OR "HJ"."HJLX"='08' OR "HJ"."HJLX"='09')
  69 - access("HJ"."JBR_ID"='9F923C36CF0BA0DCA76A5F30D642A75C')
  70 - access("A"."DD_ID"="DD_ID")
  71 - filter("A"."XJBZ"='9999' AND ("A"."ZXKPRQ">=TO_DATE(' 2014-10-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss') OR
              "A"."KJJSDSJ">=TO_DATE(' 2014-10-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss')) AND ("A"."ZXKPRQ"<=TO_DATE(' 2014-11-05
              23:59:59', 'syyyy-mm-dd hh24:mi:ss') OR "A"."KJJSDSJ"<=TO_DATE(' 2014-11-05 23:59:59', 'syyyy-mm-dd hh24:mi:ss'))
              AND "A"."XSJGFZGS_DM"='001081' AND "A"."ZFBZ"='0' AND ("A"."DDZT"='12' AND ("A"."DDLX"='0' OR "A"."DDLX"='2') OR
              "A"."DDLX"='1' AND ("A"."DDZT"='04' OR "A"."DDZT"='99')) AND ("A"."YSJE"<>0 OR "A"."YSJE"=0 AND "A"."KPZT"='3'))


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
      12314  consistent gets
          0  physical reads
          0  redo size
       1405  bytes sent via SQL*Net to client
        509  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
          0  rows processed

然后搞了几个hint 最终 逻辑读 12314 还过得去,好吧,就这样吧,不继续优化了。 真他奶奶的蛋疼。


更新一下, SQL 不走 sort order by 是  select 后面 to_char(A.zxkprq, 'yyyy-mm-dd') as zxkprq,  然后又来 order by zxkprq 卧槽, 这些鸟开发 怎么去别名 跟原始列同样的 草!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  









发布了202 篇原创文章 · 获赞 456 · 访问量 138万+

猜你喜欢

转载自blog.csdn.net/robinson1988/article/details/40870901