当分页语句遇到union all

来源:互联网 发布:linux系统能玩什么游戏 编辑:程序博客网 时间:2024/05/17 21:56
SELECT *    FROM (SELECT  pubformdat0_.id id332_, pubformdat0_.domain_id domain2_332_,                  pubformdat0_.process_id process3_332_,                  pubformdat0_.entity_id entity4_332_,                  pubformdat0_.file_type file5_332_,                  pubformdat0_.title title332_, pubformdat0_.word_no word7_332_,                  pubformdat0_.priority priority332_,                  pubformdat0_.secret_level secret9_332_,                  pubformdat0_.drafter drafter332_,                  pubformdat0_.drafter_name drafter11_332_,                  pubformdat0_.draft_dept draft12_332_,                  pubformdat0_.draft_deptname draft13_332_,                  pubformdat0_.draft_date draft14_332_,                  pubformdat0_.end_date end15_332_,                  pubformdat0_.arch_state arch16_332_,                  pubformdat0_.arch_fileid arch17_332_,                  pubformdat0_.gq_templateid gq18_332_,                  pubformdat0_.gw_templateid gw19_332_,                  pubformdat0_.edit_flag edit20_332_,                  pubformdat0_.delete_flag delete21_332_,                  pubformdat0_.operator operator332_,                  pubformdat0_.operate_date operate23_332_,                  pubformdat0_.file_security_level file24_332_,                  pubformdat0_.yj_flag yj25_332_, pubformdat0_.yj_user yj26_332_              FROM wf_pub_form_data pubformdat0_              WHERE 1 = 1              and pubformdat0_.operate_date is not null                AND pubformdat0_.id IN (SELECT  DISTINCT pubformcas1_.form_id                         FROM wf_pub_form_case pubformcas1_                         WHERE pubformcas1_.case_id IN                           (SELECT /*+unnest*/ to_char(                                                               caserun0_.id)                                                            FROM case_run caserun0_,                                                                  workitem_run workitemru1_                                                            WHERE caserun0_.id                                                                   =                                                                   workitemru1_.caseid                                                              AND caserun0_.state                                                                  = 2                                                              AND workitemru1_.performer                                                                  IN (                                                                   '300016/00415'                                                                   )                                                              AND workitemru1_.valid_flag                                                                  = '0'                                                        UNION ALL                                                        SELECT to_char(                                                               caserun2_.id)                                                            FROM case_run caserun2_,                                                                  workitem_history workitemhi3_                                                            WHERE caserun2_.id                                                                   =                                                                   workitemhi3_.caseid                                                              AND caserun2_.state                                                                  = 2                                                              AND workitemhi3_.performer                                                                  IN (                                                                   '300016/00415'                                                                   )                                                              AND workitemhi3_.valid_flag                                                                  = '0')                                                                                   )              ORDER BY pubformdat0_.operate_date DESC)    WHERE rownum <= 10;SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID43pfg99tyav4a, child number 0-------------------------------------SELECT *     FROM (SELECT  pubformdat0_.id id332_, pubformdat0_.domain_id domain2_332_,  pubformdat0_.process_id process3_332_,pubformdat0_.entity_id entity4_332_,      pubformdat0_.file_type file5_332_,  pubformdat0_.title title332_, pubformdat0_.word_noword7_332_,     pubformdat0_.priority priority332_,  pubformdat0_.secret_level secret9_332_,   pubformdat0_.drafterdrafter332_,      pubformdat0_.drafter_name drafter11_332_,  pubformdat0_.draft_dept draft12_332_,pubformdat0_.draft_deptname draft13_332_,   pubformdat0_.draft_date draft14_332_,  pubformdat0_.end_date end15_332_,  pubformdat0_.arch_state arch16_332_,pubformdat0_.arch_fileid arch17_332_,       pubformdat0_.gq_templateid gq18_332_,   pubformdat0_.gw_templateid gw19_332_,Plan hash value: 2461821393---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| Id  | Operation                | Name         | Starts | E-Rows | A-Rows |A-Time | Buffers | Reads  | Writes |OMem |1Mem | Used-Mem | Used-Tmp|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|*  1 |  COUNT STOPKEY           |             |1  |       | 10 |00:00:00.39 |   23012 |  3 |   3 |     |     ||  ||   2 |   VIEW                 |             |1  |    718  | 10 |00:00:00.39 |   23012 |  3 |   3 |     |     ||  ||*  3 |    SORT ORDER BY STOPKEY     |             |1  |    718  | 10 |00:00:00.39 |   23012 |  3 |   3 | 27648 | 27648 |50176  (1)|    1024 ||*  4 |     HASH JOIN RIGHT SEMI     |             |1  |    718  |681 |00:00:00.38 |   23008 |  0 |   0 | 842K| 842K|139K (0)|  ||   5 |      VIEW                 | VW_NSO_2         |1  |    714  |693 |00:00:00.19 |    8056 |  0 |   0 |     |     ||  ||*  6 |       HASH JOIN            |             |1  |    714  |693 |00:00:00.19 |    8056 |  0 |   0 |1306K|1306K|99328  (0)|  ||   7 |        VIEW               | VW_NSO_1        |1  |    714  |693 |00:00:00.01 |    4352 |  0 |   0 |     |     ||  ||   8 | UNION-ALL                 |             |1  |       |693 |00:00:00.01 |    4352 |  0 |   0 |     |     ||  ||   9 |  NESTED LOOPS             |             |1  |    132  |  5 |00:00:00.01 |20 |  0 |   0 |     |     ||  ||  10 |   TABLE ACCESS BY INDEX ROWID| WORKITEM_RUN     |1  |    132  |  5 |00:00:00.01 | 8 |  0 |   0 |     |     ||  ||* 11 |    INDEX RANGE SCAN         | IDX_WORKITEM_R_13 |1  |    132  |  5 |00:00:00.01 | 3 |  0 |   0 |     |     ||  ||* 12 |   TABLE ACCESS BY INDEX ROWID| CASE_RUN        |5  |     1 |  5 |00:00:00.01 |12 |  0 |   0 |     |     ||  ||* 13 |    INDEX UNIQUE SCAN       | PK_CASE_RUN     |5  |     1 |  5 |00:00:00.01 | 7 |  0 |   0 |     |     ||  ||  14 |  NESTED LOOPS             |             |1  |     582 |688 |00:00:00.01 |    4332 |  0 |   0 |     |     ||  ||  15 |   TABLE ACCESS BY INDEX ROWID| WORKITEM_HISTORY  |1  |     582 |  2010 |00:00:00.01 |    1632 |  0 |   0 |     |     ||  ||* 16 |    INDEX RANGE SCAN         | IDX_WORKITEM_H_13 |1  |     325 |  2010 |00:00:00.01 |11 |  0 |   0 |     |     ||  ||* 17 |   TABLE ACCESS BY INDEX ROWID| CASE_RUN        |2010 |     1 |688 |00:00:00.01 |    2700 |  0 |   0 |     |     ||  ||* 18 |    INDEX UNIQUE SCAN       | PK_CASE_RUN     |2010 |     1 |688 |00:00:00.01 |    2012 |  0 |   0 |     |     ||  ||  19 |        INDEX FAST FULL SCAN   | IDX_WF_PUB_FC_4 |1  |     375K|384K|00:00:00.01 |    3704 |  0 |   0 |     |     ||  ||* 20 |      TABLE ACCESS FULL     | WF_PUB_FORM_DATA  |1  |     293K|295K|00:00:00.01 |   14952 |  0 |   0 |     |     ||  |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 - filter(ROWNUM<=10)   3 - filter(ROWNUM<=10)   4 - access("PUBFORMDAT0_"."ID"="$nso_col_1")   6 - access("PUBFORMCAS1_"."CASE_ID"="$nso_col_1")  11 - access("WORKITEMRU1_"."PERFORMER"='300016/00415' AND "WORKITEMRU1_"."VALID_FLAG"='0')  12 - filter("CASERUN0_"."STATE"=2)  13 - access("CASERUN0_"."ID"="WORKITEMRU1_"."CASEID")  16 - access("WORKITEMHI3_"."PERFORMER"='300016/00415' AND "WORKITEMHI3_"."VALID_FLAG"='0')  17 - filter("CASERUN2_"."STATE"=2)  18 - access("CASERUN2_"."ID"="WORKITEMHI3_"."CASEID")  20 - filter("PUBFORMDAT0_"."OPERATE_DATE" IS NOT NULL)52 rows selected.从wf_pub_form_data pubformdat0_ 返回295K条记录,|* 20 |      TABLE ACCESS FULL     | WF_PUB_FORM_DATA  |1  |     293K|分页SQL不能走全表扫描在operate_date 排序列上创建索引create index wf_pub_form_data_idx1 on wf_pub_form_data(operate_date);SELECT *    FROM (SELECT  /*+index_desc(pubformdat0_ wf_pub_form_data_idx1)*/  pubformdat0_.id id332_, pubformdat0_.domain_id domain2_332_,                  pubformdat0_.process_id process3_332_,                  pubformdat0_.entity_id entity4_332_,                  pubformdat0_.file_type file5_332_,                  pubformdat0_.title title332_, pubformdat0_.word_no word7_332_,                  pubformdat0_.priority priority332_,                  pubformdat0_.secret_level secret9_332_,                  pubformdat0_.drafter drafter332_,                  pubformdat0_.drafter_name drafter11_332_,                  pubformdat0_.draft_dept draft12_332_,                  pubformdat0_.draft_deptname draft13_332_,                  pubformdat0_.draft_date draft14_332_,                  pubformdat0_.end_date end15_332_,                  pubformdat0_.arch_state arch16_332_,                  pubformdat0_.arch_fileid arch17_332_,                  pubformdat0_.gq_templateid gq18_332_,                  pubformdat0_.gw_templateid gw19_332_,                  pubformdat0_.edit_flag edit20_332_,                  pubformdat0_.delete_flag delete21_332_,                  pubformdat0_.operator operator332_,                  pubformdat0_.operate_date operate23_332_,                  pubformdat0_.file_security_level file24_332_,                  pubformdat0_.yj_flag yj25_332_, pubformdat0_.yj_user yj26_332_              FROM wf_pub_form_data pubformdat0_              WHERE 1 = 1              and pubformdat0_.operate_date is not null                AND pubformdat0_.id IN (SELECT  DISTINCT pubformcas1_.form_id                         FROM wf_pub_form_case pubformcas1_                         WHERE pubformcas1_.case_id IN                           (SELECT /*+unnest*/ to_char(                                                               caserun0_.id)                                                            FROM case_run caserun0_,                                                                  workitem_run workitemru1_                                                            WHERE caserun0_.id                                                                   =                                                                   workitemru1_.caseid                                                              AND caserun0_.state                                                                  = 2                                                              AND workitemru1_.performer                                                                  IN (                                                                   '300016/00415'                                                                   )                                                              AND workitemru1_.valid_flag                                                                  = '0'                                                        UNION ALL                                                        SELECT to_char(                                                               caserun2_.id)                                                            FROM case_run caserun2_,                                                                  workitem_history workitemhi3_                                                            WHERE caserun2_.id                                                                   =                                                                   workitemhi3_.caseid                                                              AND caserun2_.state                                                                  = 2                                                              AND workitemhi3_.performer                                                                  IN (                                                                   '300016/00415'                                                                   )                                                              AND workitemhi3_.valid_flag                                                                  = '0')                                                                                   )              ORDER BY pubformdat0_.operate_date DESC)    WHERE rownum <= 10    SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_IDcr76jyxubq29b, child number 0-------------------------------------SELECT *     FROM (SELECT  /*+index_desc(pubformdat0_ wf_pub_form_data_idx1)*/pubformdat0_.id id332_, pubformdat0_.domain_id domain2_332_,  pubformdat0_.process_id process3_332_,  pubformdat0_.entity_id entity4_332_,pubformdat0_.file_typefile5_332_,     pubformdat0_.title title332_, pubformdat0_.word_no word7_332_,     pubformdat0_.priority priority332_,      pubformdat0_.secret_level secret9_332_,       pubformdat0_.drafter drafter332_,  pubformdat0_.drafter_namedrafter11_332_,  pubformdat0_.draft_dept draft12_332_,pubformdat0_.draft_deptname draft13_332_,pubformdat0_.draft_date draft14_332_,       pubformdat0_.end_date end15_332_,  pubformdat0_.arch_state arch16_332_,    pubformdat0_.arch_fileid arch17_332_,   pubformdat0_.gq_templateid gq18_332_,Plan hash value: 3354863370------------------------------------------------------------------------------------------------------------------------------------------------------------| Id  | Operation                  | Name              | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads|  OMem |  1Mem | Used-Mem |------------------------------------------------------------------------------------------------------------------------------------------------------------|*  1 |  COUNT STOPKEY             |                 |    1 |        |     10 |00:00:00.97 |   293K|   6453 ||     ||   2 |   VIEW                   |                 |    1 |    718 |     10 |00:00:00.97 |   293K|   6453 ||     ||*  3 |    SORT ORDER BY STOPKEY       |                 |    1 |    718 |     10 |00:00:00.97 |   293K|   6453 |  5120 |  5120 | 4096(0)||*  4 |     HASH JOIN RIGHT SEMI       |                 |    1 |    718 |    681 |00:00:00.97 |   293K|   6453 |   842K|   842K|  169K (0)||   5 |      VIEW                   | VW_NSO_2            |    1 |    714 |    693 |00:00:00.19 |  8056 |      0 ||     ||*  6 |       HASH JOIN              |                 |    1 |    714 |    693 |00:00:00.19 |  8056 |      0 |  1306K|  1306K|99328(0)||   7 |        VIEW                 | VW_NSO_1            |    1 |    714 |    693 |00:00:00.01 |  4352 |      0 ||     ||   8 | UNION-ALL                   |                 |    1 |        |    693 |00:00:00.01 |  4352 |      0 ||     ||   9 |  NESTED LOOPS               |                 |    1 |    132 |      5 |00:00:00.01 |    20 |      0 ||     ||  10 |   TABLE ACCESS BY INDEX ROWID  | WORKITEM_RUN         |    1 |    132 |      5 |00:00:00.01 |     8 |      0 ||     ||* 11 |    INDEX RANGE SCAN           | IDX_WORKITEM_R_13     |    1 |    132 |      5 |00:00:00.01 |     3 |      0 ||     ||* 12 |   TABLE ACCESS BY INDEX ROWID  | CASE_RUN            |    5 |      1 |      5 |00:00:00.01 |    12 |      0 ||     ||* 13 |    INDEX UNIQUE SCAN         | PK_CASE_RUN         |    5 |      1 |      5 |00:00:00.01 |     7 |      0 ||     ||  14 |  NESTED LOOPS               |                 |    1 |    582 |    688 |00:00:00.01 |  4332 |      0 ||     ||  15 |   TABLE ACCESS BY INDEX ROWID  | WORKITEM_HISTORY      |    1 |    582 |   2010 |00:00:00.01 |  1632 |      0 ||     ||* 16 |    INDEX RANGE SCAN           | IDX_WORKITEM_H_13     |    1 |    325 |   2010 |00:00:00.01 |    11 |      0 ||     ||* 17 |   TABLE ACCESS BY INDEX ROWID  | CASE_RUN            | 2010 |      1 |    688 |00:00:00.01 |  2700 |      0 ||     ||* 18 |    INDEX UNIQUE SCAN         | PK_CASE_RUN         | 2010 |      1 |    688 |00:00:00.01 |  2012 |      0 ||     ||  19 |        INDEX FAST FULL SCAN     | IDX_WF_PUB_FC_4     |    1 |    375K|    384K|00:00:00.01 |  3704 |      0 ||     ||  20 |      TABLE ACCESS BY INDEX ROWID | WF_PUB_FORM_DATA      |    1 |    293K|    295K|00:00:00.59 |   285K|   6453 ||     ||* 21 |       INDEX FULL SCAN DESCENDING | WF_PUB_FORM_DATA_IDX1 |    1 |    295K|    295K|00:00:00.04 |   787 |    786 ||     |------------------------------------------------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 - filter(ROWNUM<=10)   3 - filter(ROWNUM<=10)   4 - access("PUBFORMDAT0_"."ID"="$nso_col_1")   6 - access("PUBFORMCAS1_"."CASE_ID"="$nso_col_1")  11 - access("WORKITEMRU1_"."PERFORMER"='300016/00415' AND "WORKITEMRU1_"."VALID_FLAG"='0')  12 - filter("CASERUN0_"."STATE"=2)  13 - access("CASERUN0_"."ID"="WORKITEMRU1_"."CASEID")  16 - access("WORKITEMHI3_"."PERFORMER"='300016/00415' AND "WORKITEMHI3_"."VALID_FLAG"='0')  17 - filter("CASERUN2_"."STATE"=2)  18 - access("CASERUN2_"."ID"="WORKITEMHI3_"."CASEID")  21 - filter("PUBFORMDAT0_"."OPERATE_DATE" IS NOT NULL)53 rows selected.扫描了295K创建组合索引: where条件列+排序列create index WF_PUB_FORM_DATA_IDX2 on WF_PUB_FORM_DATA(ID,OPERATE_DATE);SELECT *    FROM (SELECT  /*+index_desc(pubformdat0_ WF_PUB_FORM_DATA_IDX2)*/  pubformdat0_.id id332_, pubformdat0_.domain_id domain2_332_,                  pubformdat0_.process_id process3_332_,                  pubformdat0_.entity_id entity4_332_,                  pubformdat0_.file_type file5_332_,                  pubformdat0_.title title332_, pubformdat0_.word_no word7_332_,                  pubformdat0_.priority priority332_,                  pubformdat0_.secret_level secret9_332_,                  pubformdat0_.drafter drafter332_,                  pubformdat0_.drafter_name drafter11_332_,                  pubformdat0_.draft_dept draft12_332_,                  pubformdat0_.draft_deptname draft13_332_,                  pubformdat0_.draft_date draft14_332_,                  pubformdat0_.end_date end15_332_,                  pubformdat0_.arch_state arch16_332_,                  pubformdat0_.arch_fileid arch17_332_,                  pubformdat0_.gq_templateid gq18_332_,                  pubformdat0_.gw_templateid gw19_332_,                  pubformdat0_.edit_flag edit20_332_,                  pubformdat0_.delete_flag delete21_332_,                  pubformdat0_.operator operator332_,                  pubformdat0_.operate_date operate23_332_,                  pubformdat0_.file_security_level file24_332_,                  pubformdat0_.yj_flag yj25_332_, pubformdat0_.yj_user yj26_332_              FROM wf_pub_form_data pubformdat0_              WHERE 1 = 1              and pubformdat0_.operate_date is not null                AND pubformdat0_.id IN (SELECT  DISTINCT pubformcas1_.form_id                         FROM wf_pub_form_case pubformcas1_                         WHERE pubformcas1_.case_id IN                           (SELECT /*+unnest*/ to_char(                                                               caserun0_.id)                                                            FROM case_run caserun0_,                                                                  workitem_run workitemru1_                                                            WHERE caserun0_.id                                                                   =                                                                   workitemru1_.caseid                                                              AND caserun0_.state                                                                  = 2                                                              AND workitemru1_.performer                                                                  IN (                                                                   '300016/00415'                                                                   )                                                              AND workitemru1_.valid_flag                                                                  = '0'                                                        UNION ALL                                                        SELECT to_char(                                                               caserun2_.id)                                                            FROM case_run caserun2_,                                                                  workitem_history workitemhi3_                                                            WHERE caserun2_.id                                                                   =                                                                   workitemhi3_.caseid                                                              AND caserun2_.state                                                                  = 2                                                              AND workitemhi3_.performer                                                                  IN (                                                                   '300016/00415'                                                                   )                                                              AND workitemhi3_.valid_flag                                                                  = '0')                                                                                   )              ORDER BY pubformdat0_.operate_date DESC)    WHERE rownum <= 10        SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID05xxrwtr25wgz, child number 0-------------------------------------SELECT *     FROM (SELECT  /*+index_desc(pubformdat0_ WF_PUB_FORM_DATA_IDX2)*/pubformdat0_.id id332_, pubformdat0_.domain_id domain2_332_,pubformdat0_.process_id process3_332_,pubformdat0_.entity_id entity4_332_,      pubformdat0_.file_type file5_332_,pubformdat0_.title title332_, pubformdat0_.word_no word7_332_,pubformdat0_.priority priority332_,     pubformdat0_.secret_levelsecret9_332_,       pubformdat0_.drafter drafter332_,  pubformdat0_.drafter_name drafter11_332_,     pubformdat0_.draft_deptdraft12_332_,       pubformdat0_.draft_deptname draft13_332_,  pubformdat0_.draft_date draft14_332_,     pubformdat0_.end_dateend15_332_,     pubformdat0_.arch_state arch16_332_,   pubformdat0_.arch_fileid arch17_332_,  pubformdat0_.gq_templateidgq18_332_,Plan hash value: 549882602---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| Id  | Operation                  | Name             | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  | Writes |  OMem |  1Mem | Used-Mem | Used-Tmp|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|*  1 |  COUNT STOPKEY             |                  |      1 |      |     10 |00:00:00.20 |   10106 |    534 | 5    |   |      | ||   2 |   VIEW                   |                  |      1 |    718 |     10 |00:00:00.20 |   10106 |    534 | 5    |   |      | ||*  3 |    SORT ORDER BY STOPKEY       |                  |      1 |    718 |     10 |00:00:00.20 |   10106 |    534 | 5 | 18432 | 18432 |74752  (1)|    1024 ||   4 |     TABLE ACCESS BY INDEX ROWID  | WF_PUB_FORM_DATA     |      1 |      1 |    681 |00:00:00.20 |   10103 |    532 | 3    |   |      | ||   5 |      NESTED LOOPS             |                  |      1 |    718 |   1363 |00:00:00.20 |    9424 |    532 | 3    |   |      | ||   6 |       VIEW                 | VW_NSO_2            |      1 |    714 |    681 |00:00:00.19 |    8056 |3 | 3    |   |      | ||   7 |        HASH UNIQUE           |                  |      1 |    714 |    681 |00:00:00.19 |    8056 |3 | 3 |   846K|   846K|  252K (0)|    1024 ||*  8 | HASH JOIN                   |                  |      1 |    714 |    693 |00:00:00.19 |    8056 |0 | 0 |  1306K|  1306K|98304  (0)| ||   9 |  VIEW                     | VW_NSO_1            |      1 |    714 |    693 |00:00:00.01 |    4352 |0 | 0    |   |      | ||  10 |   UNION-ALL                 |                  |      1 |      |    693 |00:00:00.01 |    4352 |0 | 0    |   |      | ||  11 |    NESTED LOOPS              |                  |      1 |    132 |     5 |00:00:00.01 |      20 |0 | 0    |   |      | ||  12 |     TABLE ACCESS BY INDEX ROWID| WORKITEM_RUN        |      1 |    132 |5 |00:00:00.01 |       8 |0 | 0    |   |      | ||* 13 |      INDEX RANGE SCAN         | IDX_WORKITEM_R_13    |      1 |    132 |5 |00:00:00.01 |       3 |0 | 0    |   |      | ||* 14 |     TABLE ACCESS BY INDEX ROWID| CASE_RUN            |      5 |      1 |5 |00:00:00.01 |      12 |0 | 0    |   |      | ||* 15 |      INDEX UNIQUE SCAN       | PK_CASE_RUN        |      5 |      1 |5 |00:00:00.01 |       7 |0 | 0    |   |      | ||  16 |    NESTED LOOPS              |                  |      1 |    582 |    688 |00:00:00.01 |    4332 |0 | 0    |   |      | ||  17 |     TABLE ACCESS BY INDEX ROWID| WORKITEM_HISTORY     |      1 |    582 |   2010 |00:00:00.01 |    1632 |0 | 0    |   |      | ||* 18 |      INDEX RANGE SCAN         | IDX_WORKITEM_H_13    |      1 |    325 |   2010 |00:00:00.01 |      11 |0 | 0    |   |      | ||* 19 |     TABLE ACCESS BY INDEX ROWID| CASE_RUN            |   2010 |      1 |    688 |00:00:00.01 |    2700 |0 | 0    |   |      | ||* 20 |      INDEX UNIQUE SCAN       | PK_CASE_RUN        |   2010 |      1 |    688 |00:00:00.01 |    2012 |0 | 0    |   |      | ||  21 |  INDEX FAST FULL SCAN         | IDX_WF_PUB_FC_4      |      1 |    375K|    384K|00:00:00.01 |    3704 |0 | 0    |   |      | ||* 22 |       INDEX RANGE SCAN DESCENDING| WF_PUB_FORM_DATA_IDX2|    681 |      1 |    681 |00:00:00.01 |    1368 |    529 | 0    |   |      | |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 - filter(ROWNUM<=10)   3 - filter(ROWNUM<=10)   8 - access("PUBFORMCAS1_"."CASE_ID"="$nso_col_1")  13 - access("WORKITEMRU1_"."PERFORMER"='300016/00415' AND "WORKITEMRU1_"."VALID_FLAG"='0')  14 - filter("CASERUN0_"."STATE"=2)  15 - access("CASERUN0_"."ID"="WORKITEMRU1_"."CASEID")  18 - access("WORKITEMHI3_"."PERFORMER"='300016/00415' AND "WORKITEMHI3_"."VALID_FLAG"='0')  19 - filter("CASERUN2_"."STATE"=2)  20 - access("CASERUN2_"."ID"="WORKITEMHI3_"."CASEID")  22 - access("PUBFORMDAT0_"."ID"="$nso_col_1")       filter("PUBFORMDAT0_"."OPERATE_DATE" IS NOT NULL)54 rows selected.为扫描时扫描681行停止,而不是10行呢?为什么没及时刹车呢?因为子查询这里有union allUNION ALL                                                        SELECT to_char(                                                               caserun2_.id)                                                            FROM case_run caserun2_,                                                                  workitem_history workitemhi3_                                                            WHERE caserun2_.id                                                                   =                                                                   workitemhi3_.caseid                                                              AND caserun2_.state                                                                  = 2                                                              AND workitemhi3_.performer                                                                  IN (                                                                   '300016/00415'                                                                   )                                                              AND workitemhi3_.valid_flag                                                                  = '0')                                                                  去掉union all后: SELECT *    FROM (SELECT  /*+index_desc(pubformdat0_ wf_pub_form_data_idx2)*/  pubformdat0_.id id332_, pubformdat0_.domain_id domain2_332_,                  pubformdat0_.process_id process3_332_,                  pubformdat0_.entity_id entity4_332_,                  pubformdat0_.file_type file5_332_,                  pubformdat0_.title title332_, pubformdat0_.word_no word7_332_,                  pubformdat0_.priority priority332_,                  pubformdat0_.secret_level secret9_332_,                  pubformdat0_.drafter drafter332_,                  pubformdat0_.drafter_name drafter11_332_,                  pubformdat0_.draft_dept draft12_332_,                  pubformdat0_.draft_deptname draft13_332_,                  pubformdat0_.draft_date draft14_332_,                  pubformdat0_.end_date end15_332_,                  pubformdat0_.arch_state arch16_332_,                  pubformdat0_.arch_fileid arch17_332_,                  pubformdat0_.gq_templateid gq18_332_,                  pubformdat0_.gw_templateid gw19_332_,                  pubformdat0_.edit_flag edit20_332_,                  pubformdat0_.delete_flag delete21_332_,                  pubformdat0_.operator operator332_,                  pubformdat0_.operate_date operate23_332_,                  pubformdat0_.file_security_level file24_332_,                  pubformdat0_.yj_flag yj25_332_, pubformdat0_.yj_user yj26_332_              FROM wf_pub_form_data pubformdat0_              WHERE 1 = 1              and pubformdat0_.operate_date is not null                AND pubformdat0_.id IN (SELECT  distinct  pubformcas1_.form_id                         FROM wf_pub_form_case pubformcas1_                         WHERE pubformcas1_.case_id IN                           (SELECT /*+unnest*/ to_char(                                                               caserun0_.id)                                                            FROM case_run caserun0_,                                                                  workitem_run workitemru1_                                                            WHERE caserun0_.id                                                                   =                                                                   workitemru1_.caseid                                                              AND caserun0_.state                                                                  = 2                                                              AND workitemru1_.performer                                                                  IN (                                                                   '300016/00415'                                                                   )                                                              AND workitemru1_.valid_flag                                                                  = '0'))                       ORDER BY pubformdat0_.operate_date DESC)    WHERE rownum <= 5SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_IDb7szcw0nawpvq, child number 0------------------------------------- SELECT *     FROM (SELECT  /*+index_desc(pubformdat0_ wf_pub_form_data_idx2)*/  pubformdat0_.id id332_, pubformdat0_.domain_iddomain2_332_,       pubformdat0_.process_id process3_332_,       pubformdat0_.entity_id entity4_332_, pubformdat0_.file_type file5_332_,     pubformdat0_.title title332_, pubformdat0_.word_no word7_332_,pubformdat0_.priority priority332_,     pubformdat0_.secret_level secret9_332_,      pubformdat0_.drafterdrafter332_,      pubformdat0_.drafter_name drafter11_332_,  pubformdat0_.draft_dept draft12_332_,    pubformdat0_.draft_deptname draft13_332_,       pubformdat0_.draft_date draft14_332_,      pubformdat0_.end_dateend15_332_,     pubformdat0_.arch_state arch16_332_,   pubformdat0_.arch_fileid arch17_332_,pubformdat0_.gq_templateid gq18_332_,Plan hash value: 3448365600----------------------------------------------------------------------------------------------------------------------------------------------------| Id  | Operation      | Name      | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |----------------------------------------------------------------------------------------------------------------------------------------------------|*  1 |  COUNT STOPKEY      |       |      1 ||      5 |00:00:00.01 |      54 |||     ||   2 |   VIEW      |       |      1 |    133 |      5 |00:00:00.01 |      54 |||     ||*  3 |    SORT ORDER BY STOPKEY      |       |      1 |    133 |      5 |00:00:00.01 |      54 |  3072 |  3072 | 2048(0)||   4 |     TABLE ACCESS BY INDEX ROWID       | WF_PUB_FORM_DATA      |      1 |      1 |      5 |00:00:00.01 |      54 |||     ||   5 |      NESTED LOOPS      |       |      1 |    133 |     11 |00:00:00.01 |      49 |||     ||   6 |       VIEW      | VW_NSO_1      |      1 |    132 |      5 |00:00:00.01 |      37 |||     ||   7 |        HASH UNIQUE      |       |      1 |    132 |      5 |00:00:00.01 |      37 |   846K|   846K|  101K (0)||   8 | TABLE ACCESS BY INDEX ROWID   | WF_PUB_FORM_CASE      |      1 |      1 |      5 |00:00:00.01 |      37 |||     ||   9 |  NESTED LOOPS      |       |      1 |    132 |     11 |00:00:00.01 |      32 |||     ||  10 |   NESTED LOOPS      |       |      1 |    132 |      5 |00:00:00.01 |      20 |||     ||  11 |    TABLE ACCESS BY INDEX ROWID| WORKITEM_RUN      |      1 |    132 |      5 |00:00:00.01 |       8 |||     ||* 12 |     INDEX RANGE SCAN      | IDX_WORKITEM_R_13     |      1 |    132 |      5 |00:00:00.01 |       3 |||     ||* 13 |    TABLE ACCESS BY INDEX ROWID| CASE_RUN      |      5 |      1 |      5 |00:00:00.01 |      12 |||     ||* 14 |     INDEX UNIQUE SCAN      | PK_CASE_RUN      |      5 |      1 |      5 |00:00:00.01 |       7 |||     ||* 15 |   INDEX RANGE SCAN      | IDX_WF_PUB_FC_2       |      5 |      1 |      5 |00:00:00.01 |      12 |||     ||* 16 |       INDEX RANGE SCAN DESCENDING     | WF_PUB_FORM_DATA_IDX2 |      5 |      1 |      5 |00:00:00.01 |      12 |||     |----------------------------------------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 - filter(ROWNUM<=5)   3 - filter(ROWNUM<=5)  12 - access("WORKITEMRU1_"."PERFORMER"='300016/00415' AND "WORKITEMRU1_"."VALID_FLAG"='0')  13 - filter("CASERUN0_"."STATE"=2)  14 - access("CASERUN0_"."ID"="WORKITEMRU1_"."CASEID")  15 - access("PUBFORMCAS1_"."CASE_ID"=TO_CHAR("CASERUN0_"."ID"))  16 - access("PUBFORMDAT0_"."ID"="$nso_col_1")       filter("PUBFORMDAT0_"."OPERATE_DATE" IS NOT NULL)46 rows selected.果断刹住了

0 0
原创粉丝点击