当分页语句遇到union all
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_ID 43pfg99tyav4a, 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_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_, 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_ID cr76jyxubq29b, 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_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_, 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_ID 05xxrwtr25wgz, 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_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_, 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 all
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') 去掉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 <= 5
SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last')); PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID b7szcw0nawpvq, 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_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_, 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. 果断刹住了
当分页语句遇到union all的更多相关文章
- Sqlserver2008和Oracle分页语句
SqlServer 分页语句 select StuID ,StuNo,StuName,Age,Sex, ClassName ClassName from (select *, row_number() ...
- [搜片神器]服务器SQL2005查询分页语句你理解了么
在sosobt.com网站准备采用Lucence.net来进行索引处理搜索慢问题的时候,突然发现常用的分页获取数据的row_number也支持不住了,后期查到200多万的时候非常慢(总数据有500万) ...
- Mysql 分页语句Limit用法
转载自:http://qimo601.iteye.com/blog/1634748 1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用 ...
- SQL分页语句总结
今天对分页语句做一个简单的总结,他们大同小异的,只要理解其中一个其他的就很好理解了. 使用top选项 selecttop10*from Orders a where a.orderid notin(s ...
- SQLServer2012 分页语句执行分析
上一篇文章提到了,SQLServer2012在使用Offset,Fetch语句分页时,获取了大量不需要的数据,导致查询效率低的问题. 现在让我们来看看,究竟是什么导致SQLServer不能按需取数呢? ...
- SQL点滴16—SQL分页语句总结
原文:SQL点滴16-SQL分页语句总结 今天对分页语句做一个简单的总结,他们大同小异的,只要理解其中一个其他的就很好理解了. 使用top选项 *from Orders orderid from Or ...
- 【转载】SQL语句中Union和Union All的区别
在使用到SQL语句进行数据库查询的过程中,如果需要求两个数据集合的并集,一般会使用到联合查询关键字Union或者Union All,其实Union和Union All两者的使用有一定差别,查出来的数据 ...
- Access大数据高效分页语句
Access大数据高效分页语句 oracle的分页查询可以利用rowid伪列. db2的分页查询可以利用row_number() over()聚合函数. mysql有limit. access仿佛先天 ...
- SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条
SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条 SELECT Id,[Title],[Content],[Image] FROM ( SELECT ROW_NUMBER( ...
随机推荐
- Ubuntu 13.04编译boost1.54
因为要用基于GCC4.8.1的boost最新版本的库,默认apt-get install 安装的是boost1.53, 并且基于GCC4.7.3,不是我想要的.所以决定下载源代码自己编译. 下载(后面 ...
- C#获取文件夹下指定格式的所有文件
C#获取文件夹下指定格式的所有文件的方法,虽然很简单,但还是分享一下吧,用到时可以稍加修改和优化就可以使用. 获取指定目录下所有文件 //最要使用 System.IO.Directory.GetFil ...
- Windows Server 2008 R2 搭建FTP服务
一.安装ftp服务 1.在服务管理器"角色"右键单击"添加角色". 2.下一步. 3.勾选"Web 服务器(IIS)",下一步. 4.勾选 ...
- Python元组、列表--笔记
<Python3 程序开发指南> 序列包括元组和列表,首先,我们介绍元组. 元组--tuple 元组为有序的序列,元组和字符串一样也是固定的,不能替换或删除其中的任意数据项.如果需要修改应 ...
- MySQL性能调优与架构设计读书笔记
可扩展性设计之数据切分 14.2 数据的垂直切分 如何切分,切分到什么样的程度,是一个比较考验人的难题.只能在实际的应用场景中通过平衡各方面的成本和利益,才能分析出一个真正适合自己的拆分方案. 14. ...
- css空格和去浮动的应用
今天做了项目用到css,请教前端解决,第一个是记得css空格之间的关系是隶属关系,但是在元素中却是并列关系,如<div class="right_side_item_moban gra ...
- Android 如何调用自写APK和非自写APK
由于项目需要,调用一个现成的APK,总结之余,顺便把怎么调用自写APK的方法也写上,以做比较 1.如何调用现成的APK: 先上调用代码,然后再一一解释: Intent mIntent = new In ...
- DHCP租约时间工作原理
问题: 很多用户在使用路由器的DHCP服务器过程中都有一个疑问,DHCP有个设置项目是设置DHCP地址的租约时间,如果设置的比较短,是否会出现租约时间到了以后会重新去获取ip地址,造成用户断网? ...
- ESXi控制台TSM:弥补vSphere Client不足
当vSphere Client不能完成某些任务时,主机的ESXi控制台及其技术支持模式(TSM)可能能派上用场. ESXi控制台允许管理员执行不能通过vSphere Client进行配置的管理任务,比 ...
- 装饰(Decorator)模式
1.装饰(Decorator)模式 动态给一个对象添加一些额外的职责.就增加功能来说,装饰模式比生成子类更为灵活.Component是定义一个对象接口.可以给这些对象动态地添加职责.Concre ...