不要對date類型to_char

數據庫環境Oracle12c
一位運維DBA學員發來SQL優化請求,他說這是一個報表,要跑7分鐘,開發天天被罵,請他優化
他搞不定,把執行計劃發給我,我瞄了一眼執行計劃,發現有笛卡爾積,於是叫他禁止笛卡爾積
禁止笛卡爾積之後,SQL還是要跑1分多鐘,SQL語句和執行計劃如下:

select rownum,substr(to_char(t.ymd,'yyyymmdd'),5,2)||'月'||
substr(to_char(t.ymd,'yyyymmdd'),7,2)||'日' as ymd ,旅客發送,貨物發送,裝車 from (
select ymd,國鐵客運量+合資客運量+地鐵客運量+神華客運量 as 旅客發送,
國鐵貨運量+合資貨運量+地鐵貨運量+神華貨運量 as 貨物發送,
國鐵裝車數+合資裝車數+地鐵裝車數+神華裝車數 as 裝車 from (
select ymd,serial,
               zb_4002 AS 國鐵客運量,
                 xb_2003 AS 國鐵貨運量,
                 xb_1001 AS 國鐵裝車數,
                 HZB1001 AS 合資客運量,
                 HZB1004 AS 合資貨運量,
                 HZB1006 AS 合資裝車數,
                 DZB1001 AS 地鐵客運量,
                 DZB1004 AS 地鐵貨運量,
                 DZB1006 AS 地鐵裝車數,
                 shb1001 as 神華客運量,
                 shb1004 as 神華貨運量,
                 shb1006 as 神華裝車數
    from 
                 jmddb a 
                 join
                 (
                     select 
                         x.ymd,x.jm,zb_4002,xb_2003,xb_1001,h.HZB1001,h.HZB1004,h.HZB1006,DZB1001,DZB1004,DZB1006,
                         s.hzb1001 as shb1001,s.hzb1004 as shb1004,s.hzb1006 as shb1006
                     from 
                         zb_4ddb x,xb_2ddb y,xb_1ddb z,HZB1DDB h,DZB1DDB d,
                         (
                             select ymd as ymd,a.admcode as jm,zm,hzb1001,hzb1004,hzb1006
                             from jmddb a join
                                 (select ymd,'+' as jm,zm,hzb1001,hzb1004,hzb1006 from hzbnetd where 
                                 to_char(ymd,'yyyy-mm-dd')>=(substr(to_char(add_months(to_date('2019-05-02','yyyy-mm-dd'),-12),'yyyy-mm-dd'),0,4)||'-05-01') 
                                 and  to_char(ymd,'yyyy-mm-dd')<=to_char(add_months(to_date('2019-05-02','yyyy-mm-dd'),-12),'yyyy-mm-dd') )b
                             on a.admcode=b.jm  and a.serial =19
                         ) s
                     where 
                         to_char(x.ymd,'yyyy-mm-dd')>=(substr(to_char(add_months(to_date('2019-05-02','yyyy-mm-dd'),-12),'yyyy-mm-dd'),0,4)||'-05-01') 
                         and to_char(x.ymd,'yyyy-mm-dd')<=to_char(add_months(to_date('2019-05-02','yyyy-mm-dd'),-12),'yyyy-mm-dd')
                         and x.ymd=y.ymd and x.ymd=z.ymd and x.ymd=s.ymd and x.ymd=h.ymd and x.ymd=d.ymd
                         and x.jm=y.jm and x.jm=z.jm and x.jm=s.jm and x.jm=h.jm and x.jm=d.jm
                 )  b
             on 
                 a.admcode=b.jm and a.serial =19) order by ymd) t 

---------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                             | Name                 | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
---------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                      |                      |      1 |        |      1 |00:01:18.56 |    2293K|       |       |          |
|   1 |  SORT AGGREGATE                       |                      |      1 |      1 |      1 |00:01:18.56 |    2293K|       |       |          |
|   2 |   VIEW                                |                      |      1 |      1 |      1 |00:01:18.56 |    2293K|       |       |          |
|   3 |    SORT AGGREGATE                     |                      |      1 |      1 |      1 |00:01:18.56 |    2293K|       |       |          |
|*  4 |     HASH JOIN                         |                      |      1 |      1 |      5 |00:01:18.56 |    2293K|  1797K|  1797K|  957K (0)|
|   5 |      NESTED LOOPS                     |                      |      1 |      1 |      5 |00:01:18.52 |    2288K|       |       |          |
|   6 |       NESTED LOOPS                    |                      |      1 |      1 |      5 |00:01:18.41 |    2285K|       |       |          |
|   7 |        NESTED LOOPS                   |                      |      1 |      1 |      5 |00:01:18.35 |    2283K|       |       |          |
|   8 |         NESTED LOOPS                  |                      |      1 |      1 |      5 |00:01:18.35 |    2283K|       |       |          |
|   9 |          NESTED LOOPS                 |                      |      1 |      1 |   4899 |00:00:00.01 |     381 |       |       |          |
|  10 |           NESTED LOOPS                |                      |      1 |      1 |      1 |00:00:00.01 |      14 |       |       |          |
|* 11 |            TABLE ACCESS FULL          | ZD_LJ                |      1 |      1 |      1 |00:00:00.01 |       7 |       |       |          |
|* 12 |            TABLE ACCESS FULL          | ZD_LJ                |      1 |      1 |      1 |00:00:00.01 |       7 |       |       |          |
|* 13 |           INDEX RANGE SCAN            | INDEX_HZB1_002       |      1 |     46 |   4899 |00:00:00.01 |     367 |       |       |          |
|  14 |            TABLE ACCESS BY INDEX ROWID| T_DIC_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       2 |       |       |          |
|* 15 |             INDEX UNIQUE SCAN         | INDEX_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       1 |       |       |          |
|* 16 |          INDEX RANGE SCAN             | INDEX_ZB4_003        |   4899 |      1 |      5 |00:01:18.33 |    2282K|       |       |          |
|  17 |           TABLE ACCESS BY INDEX ROWID | T_DIC_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       2 |       |       |          |
|* 18 |            INDEX UNIQUE SCAN          | INDEX_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       1 |       |       |          |
|* 19 |         INDEX RANGE SCAN              | HZBNETD_UNIQUE_INDEX |      5 |      1 |      5 |00:00:00.01 |       7 |       |       |          |
|* 20 |        INDEX RANGE SCAN               | INDEX_DZB1_002       |      5 |      1 |      5 |00:00:00.06 |    1824 |       |       |          |
|  21 |         TABLE ACCESS BY INDEX ROWID   | T_DIC_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       2 |       |       |          |
|* 22 |          INDEX UNIQUE SCAN            | INDEX_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       1 |       |       |          |
|* 23 |       INDEX RANGE SCAN                | INDEX_XB1_001        |      5 |      1 |      5 |00:00:00.10 |    3264 |       |       |          |
|  24 |        TABLE ACCESS BY INDEX ROWID    | T_DIC_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       2 |       |       |          |
|* 25 |         INDEX UNIQUE SCAN             | INDEX_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       1 |       |       |          |
|* 26 |      TABLE ACCESS FULL                | SJ_XB2               |      1 |   1391 |   7791 |00:00:00.04 |    5279 |       |       |          |
---------------------------------------------------------------------------------------------------------------------------------------------------

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

   4 - access(TO_DATE("T"."ZB4_002",'YYYY/MM/DD')=TO_DATE("T"."XB2_002",'YYYY/MM/DD') AND CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE
              "T"."ZB4_003" END =CASE "T"."XB2_003" WHEN 'ALL' THEN '+' ELSE "T"."XB2_003" END )
  11 - filter(("T"."LJ_001"=19 AND "T"."LJ_002"='+'))
  12 - filter(("T"."LJ_002"='+' AND "T"."LJ_001"=19))
  13 - access("T"."HZB1_002"<=)
       filter(CASE "T"."HZB1_003" WHEN 'ALL' THEN '+' ELSE "T"."HZB1_003" END ='+')
  15 - access("T"."KEY"='api_rptfolder_name')
  16 - access("T"."ZB4_001"='D' AND "T"."ZB4_002"<=)
       filter((CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE "T"."ZB4_003" END ='+' AND "T"."LJ_002"=CASE "T"."ZB4_003" WHEN 'ALL' THEN '+'
              ELSE "T"."ZB4_003" END  AND "T"."LJ_002"=CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE "T"."ZB4_003" END  AND
              TO_CHAR(TO_DATE("T"."ZB4_002",'YYYY/MM/DD'),'yyyy-mm-dd')>='2018-05-01' AND
              TO_CHAR(TO_DATE("T"."ZB4_002",'YYYY/MM/DD'),'yyyy-mm-dd')<='2018-05-05' AND CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE "T"."ZB4_003" END
              =CASE "T"."HZB1_003" WHEN 'ALL' THEN '+' ELSE "T"."HZB1_003" END  AND
              TO_DATE("T"."ZB4_002",'YYYY/MM/DD')=TO_DATE("T"."HZB1_002",'YYYY/MM/DD') AND "T"."ZB4_001"='D'))
  18 - access("T"."KEY"='api_rptfolder_name')
  19 - access("YMD"=TO_DATE("T"."ZB4_002",'YYYY/MM/DD'))
       filter((TO_CHAR(INTERNAL_FUNCTION("YMD"),'yyyy-mm-dd')>='2018-05-01' AND
              TO_CHAR(INTERNAL_FUNCTION("YMD"),'yyyy-mm-dd')<='2018-05-05'))
  20 - access("T"."DZB1_002"<=)
       filter((CASE "T"."DZB1_003" WHEN 'ALL' THEN '+' ELSE "T"."DZB1_003" END ='+' AND CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE
              "T"."ZB4_003" END =CASE "T"."DZB1_003" WHEN 'ALL' THEN '+' ELSE "T"."DZB1_003" END  AND
              TO_DATE("T"."ZB4_002",'YYYY/MM/DD')=TO_DATE("T"."DZB1_002",'YYYY/MM/DD')))
  22 - access("T"."KEY"='api_rptfolder_name')
  23 - access("T"."XB1_001"='D' AND "T"."XB1_002"<=)
       filter((CASE "T"."XB1_003" WHEN 'ALL' THEN '+' ELSE "T"."XB1_003" END ='+' AND CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE
              "T"."ZB4_003" END =CASE "T"."XB1_003" WHEN 'ALL' THEN '+' ELSE "T"."XB1_003" END  AND
              TO_DATE("T"."ZB4_002",'YYYY/MM/DD')=TO_DATE("T"."XB1_002",'YYYY/MM/DD')))
  25 - access("T"."KEY"='api_rptfolder_name')
  26 - filter(CASE "T"."XB2_003" WHEN 'ALL' THEN '+' ELSE "T"."XB2_003" END ='+')

Note
-----
   - this is an adaptive plan

從執行計劃中看到性能主要耗費在id16,id16走的是索引範圍掃描,各位看官請仔細看

16 - access("T"."ZB4_001"='D' AND "T"."ZB4_002"<=)
       filter((CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE "T"."ZB4_003" END ='+' AND "T"."LJ_002"=CASE "T"."ZB4_003" WHEN 'ALL' THEN '+'
              ELSE "T"."ZB4_003" END  AND "T"."LJ_002"=CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE "T"."ZB4_003" END  AND
              TO_CHAR(TO_DATE("T"."ZB4_002",'YYYY/MM/DD'),'yyyy-mm-dd')>='2018-05-01' AND
              TO_CHAR(TO_DATE("T"."ZB4_002",'YYYY/MM/DD'),'yyyy-mm-dd')<='2018-05-05' AND CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE "T"."ZB4_003" END
              =CASE "T"."HZB1_003" WHEN 'ALL' THEN '+' ELSE "T"."HZB1_003" END  AND
              TO_DATE("T"."ZB4_002",'YYYY/MM/DD')=TO_DATE("T"."HZB1_002",'YYYY/MM/DD') AND "T"."ZB4_001"='D'))

沙雕開發對date類型的列用了to_char(),讓他把SQL裏面對date類型的to_char改了

select ymd,國鐵客運量+合資客運量+地鐵客運量+神華客運量 as 旅客發送,
國鐵貨運量+合資貨運量+地鐵貨運量+神華貨運量 as 貨物發送,
國鐵裝車數+合資裝車數+地鐵裝車數+神華裝車數 as 裝車 from (
select ymd,serial,
               zb_4002 AS 國鐵客運量,
                 xb_2003 AS 國鐵貨運量,
                 xb_1001 AS 國鐵裝車數,
                 HZB1001 AS 合資客運量,
                 HZB1004 AS 合資貨運量,
                 HZB1006 AS 合資裝車數,
                 DZB1001 AS 地鐵客運量,
                 DZB1004 AS 地鐵貨運量,
                 DZB1006 AS 地鐵裝車數,
                 shb1001 as 神華客運量,
                 shb1004 as 神華貨運量,
                 shb1006 as 神華裝車數
    from 
                 jmddb a 
                 join
                 (
                     select  
                         x.ymd,x.jm,zb_4002,xb_2003,xb_1001,h.HZB1001,h.HZB1004,h.HZB1006,DZB1001,DZB1004,DZB1006,
                         s.hzb1001 as shb1001,s.hzb1004 as shb1004,s.hzb1006 as shb1006
                     from 
                         zb_4ddb x,xb_2ddb y,xb_1ddb z,HZB1DDB h,DZB1DDB d,
                         (
                             select ymd as ymd,a.admcode as jm,zm,hzb1001,hzb1004,hzb1006
                             from jmddb a join
                                 (select ymd,'+' as jm,zm,hzb1001,hzb1004,hzb1006 from hzbnetd where 
                                  ymd >=to_date('2019-05-05','yyyy-mm-dd') 
                                 and  ymd <= to_date('2019-05-05','yyyy-mm-dd') )b
                             on a.admcode=b.jm  and a.serial =19
                         ) s
                     where 
                          x.ymd >= to_date('2019-05-05','yyyy-mm-dd') 
                         and  x.ymd <= to_date('2019-05-05','yyyy-mm-dd') 
                         and x.ymd=y.ymd and x.ymd=z.ymd and x.ymd=s.ymd and x.ymd=h.ymd and x.ymd=d.ymd
                         and x.jm=y.jm and x.jm=z.jm and x.jm=s.jm and x.jm=h.jm and x.jm=d.jm
                 )  b
             on 
                 a.admcode=b.jm and a.serial =19) order by ymd;


執行計劃如下:

------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                             | Name                 | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                      |                      |      1 |        |      1 |00:00:00.09 |    7156 |
|   1 |  SORT AGGREGATE                       |                      |      1 |      1 |      1 |00:00:00.09 |    7156 |
|   2 |   VIEW                                |                      |      1 |      1 |      1 |00:00:00.09 |    7156 |
|   3 |    SORT AGGREGATE                     |                      |      1 |      1 |      1 |00:00:00.09 |    7156 |
|   4 |     NESTED LOOPS                      |                      |      1 |      1 |      1 |00:00:00.09 |    7156 |
|   5 |      NESTED LOOPS                     |                      |      1 |      1 |      1 |00:00:00.07 |    6685 |
|   6 |       NESTED LOOPS                    |                      |      1 |      1 |      1 |00:00:00.04 |    1406 |
|   7 |        NESTED LOOPS                   |                      |      1 |      1 |      1 |00:00:00.02 |     751 |
|   8 |         NESTED LOOPS                  |                      |      1 |      1 |      1 |00:00:00.01 |     383 |
|   9 |          NESTED LOOPS                 |                      |      1 |      1 |      1 |00:00:00.01 |     381 |
|  10 |           NESTED LOOPS                |                      |      1 |      1 |      1 |00:00:00.01 |      14 |
|* 11 |            TABLE ACCESS FULL          | ZD_LJ                |      1 |      1 |      1 |00:00:00.01 |       7 |
|* 12 |            TABLE ACCESS FULL          | ZD_LJ                |      1 |      1 |      1 |00:00:00.01 |       7 |
|* 13 |           INDEX RANGE SCAN            | INDEX_HZB1_002       |      1 |      1 |      1 |00:00:00.01 |     367 |
|  14 |            TABLE ACCESS BY INDEX ROWID| T_DIC_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       2 |
|* 15 |             INDEX UNIQUE SCAN         | INDEX_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       1 |
|* 16 |          INDEX RANGE SCAN             | HZBNETD_UNIQUE_INDEX |      1 |      1 |      1 |00:00:00.01 |       2 |
|* 17 |         INDEX RANGE SCAN              | INDEX_DZB1_002       |      1 |      1 |      1 |00:00:00.01 |     368 |
|  18 |          TABLE ACCESS BY INDEX ROWID  | T_DIC_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       2 |
|* 19 |           INDEX UNIQUE SCAN           | INDEX_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       1 |
|* 20 |        INDEX RANGE SCAN               | INDEX_XB1_001        |      1 |      1 |      1 |00:00:00.02 |     655 |
|  21 |         TABLE ACCESS BY INDEX ROWID   | T_DIC_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       2 |
|* 22 |          INDEX UNIQUE SCAN            | INDEX_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       1 |
|* 23 |       TABLE ACCESS FULL               | SJ_XB2               |      1 |      3 |      1 |00:00:00.03 |    5279 |
|* 24 |      INDEX RANGE SCAN                 | INDEX_ZB4_003        |      1 |      1 |      1 |00:00:00.01 |     471 |
|  25 |       TABLE ACCESS BY INDEX ROWID     | T_DIC_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       2 |
|* 26 |        INDEX UNIQUE SCAN              | INDEX_SYSCONFIG      |      1 |      1 |      1 |00:00:00.01 |       1 |
------------------------------------------------------------------------------------------------------------------------

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

  11 - filter(("T"."LJ_001"=19 AND "T"."LJ_002"='+'))
  12 - filter(("T"."LJ_002"='+' AND "T"."LJ_001"=19))
  13 - access("T"."HZB1_002"<=)
       filter((CASE "T"."HZB1_003" WHEN 'ALL' THEN '+' ELSE "T"."HZB1_003" END ='+' AND
              TO_DATE("T"."HZB1_002",'YYYY/MM/DD')>=TO_DATE(' 2019-05-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
              TO_DATE("T"."HZB1_002",'YYYY/MM/DD')<=TO_DATE(' 2019-05-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))
  15 - access("T"."KEY"='api_rptfolder_name')
  16 - access("YMD"=TO_DATE(' 2019-05-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
  17 - access("T"."DZB1_002"<=)
       filter((CASE "T"."DZB1_003" WHEN 'ALL' THEN '+' ELSE "T"."DZB1_003" END ='+' AND
              TO_DATE("T"."DZB1_002",'YYYY/MM/DD')>=TO_DATE(' 2019-05-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
              TO_DATE("T"."DZB1_002",'YYYY/MM/DD')<=TO_DATE(' 2019-05-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))
  19 - access("T"."KEY"='api_rptfolder_name')
  20 - access("T"."XB1_001"='D' AND "T"."XB1_002"<=)
       filter((CASE "T"."XB1_003" WHEN 'ALL' THEN '+' ELSE "T"."XB1_003" END ='+' AND
              TO_DATE("T"."XB1_002",'YYYY/MM/DD')>=TO_DATE(' 2019-05-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
              TO_DATE("T"."XB1_002",'YYYY/MM/DD')<=TO_DATE(' 2019-05-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))
  22 - access("T"."KEY"='api_rptfolder_name')
  23 - filter((CASE "T"."XB2_003" WHEN 'ALL' THEN '+' ELSE "T"."XB2_003" END ='+' AND
              TO_DATE("T"."XB2_002",'YYYY/MM/DD')>=TO_DATE(' 2019-05-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
              TO_DATE("T"."XB2_002",'YYYY/MM/DD')<=TO_DATE(' 2019-05-05 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))
  24 - access("T"."ZB4_001"='D' AND "T"."ZB4_002"<=)
       filter((CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE "T"."ZB4_003" END ='+' AND "T"."LJ_002"=CASE
              "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE "T"."ZB4_003" END  AND "T"."LJ_002"=CASE "T"."ZB4_003" WHEN 'ALL' THEN
              '+' ELSE "T"."ZB4_003" END  AND TO_DATE("T"."ZB4_002",'YYYY/MM/DD')>=TO_DATE(' 2019-05-05 00:00:00',
              'syyyy-mm-dd hh24:mi:ss') AND TO_DATE("T"."ZB4_002",'YYYY/MM/DD')<=TO_DATE(' 2019-05-05 00:00:00', 'syyyy-mm-dd
              hh24:mi:ss') AND CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE "T"."ZB4_003" END =CASE "T"."XB2_003" WHEN 'ALL'
              THEN '+' ELSE "T"."XB2_003" END  AND CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE "T"."ZB4_003" END =CASE
              "T"."XB1_003" WHEN 'ALL' THEN '+' ELSE "T"."XB1_003" END  AND CASE "T"."ZB4_003" WHEN 'ALL' THEN '+' ELSE
              "T"."ZB4_003" END =CASE "T"."HZB1_003" WHEN 'ALL' THEN '+' ELSE "T"."HZB1_003" END  AND CASE "T"."ZB4_003" WHEN
              'ALL' THEN '+' ELSE "T"."ZB4_003" END =CASE "T"."DZB1_003" WHEN 'ALL' THEN '+' ELSE "T"."DZB1_003" END  AND
              TO_DATE("T"."ZB4_002",'YYYY/MM/DD')=TO_DATE("T"."XB2_002",'YYYY/MM/DD') AND "T"."ZB4_001"='D' AND
              TO_DATE("T"."ZB4_002",'YYYY/MM/DD')=TO_DATE("T"."XB1_002",'YYYY/MM/DD') AND
              "YMD"=TO_DATE("T"."ZB4_002",'YYYY/MM/DD') AND TO_DATE("T"."ZB4_002",'YYYY/MM/DD')=TO_DATE("T"."HZB1_002",'YYYY/M
              M/DD') AND TO_DATE("T"."ZB4_002",'YYYY/MM/DD')=TO_DATE("T"."DZB1_002",'YYYY/MM/DD')))
  26 - access("T"."KEY"='api_rptfolder_name')


92 rows selected.

報表秒殺了
這種案例我都遇到幾百個了,本來不想發博客,但是很無語啊,經常遇到對date類型的列to_char這種案例,所以必須發博客罵一罵了
各位DBA,下一次你們再看到沙雕開發對date類型的列to_char,你直接把他雞雞剁了就行

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章