happyjsl1 发表于 2015-8-10 17:32
INDEX_NAME
COLUMN_NAME
COLUMN_POSITION INDEX_TYPE
------------------------------ - ...
建议先建立组合索引,然后在看看执行计划,性能是否有提高.
在UNIQUEPARTS建立组合索引(ARCHIVE_FLAG,RESULT_DATE,UNIQUEPART_ID).
在DISPATCH上面建立组合索引(UNIQUEPART_ID,WHAT).
然后在看看
SELECT UNIQUEPART_ID, 'XML_ARCHIVE' AS WHAT, 1 AS STATE
FROM (SELECT DISTINCT U.UNIQUEPART_ID
FROM SZHQUALITY.UNIQUEPARTS U
LEFT JOIN SZHQUALITY.COMPONENTS C
ON U.UNIQUEPART_ID = C.COMPONENTIDENTIFIER
LEFT JOIN SZHQUALITY.DISPATCH D
ON U.UNIQUEPART_ID = D.UNIQUEPART_ID
AND D.WHAT = 'XML_ARCHIVE'
WHERE (U.ARCHIVE_FLAG = 1)
AND (:B3 = 100 OR U.RESULT_STATE = :B3)
AND (:B2 IS NULL OR PART_CLASS = :B2)
AND (U.RESULT_DATEcreate index UNIQUEPARTS_INDEX on UNIQUEPARTS (ARCHIVE_FLAG,RESULT_DATE,UNIQUEPART_ID) online ;
Index created.
SQL> select table_name,index_name,COLUMN_POSITION from user_ind_columns where table_name = 'UNIQUEPARTS';
TABLE_NAME
INDEX_NAME
COLUMN_POSITION
------------------------------ ------------------------------ ---------------
UNIQUEPARTS
UNIQUEPARTS_INDEX
3
UNIQUEPARTS
UNIQUEPARTS_INDEX
1
UNIQUEPARTS
UNIQUEPARTS_INDEX
2
UNIQUEPARTS
UNIQUEPARTS_PK
1
UNIQUEPARTS
UNIQUEPARTS_I1
1
UNIQUEPARTS
UNIQUEPARTS_I1
2
UNIQUEPARTS
UNIQUEPARTS_I1
3
UNIQUEPARTS
UNIQUEPARTS_I1
4
UNIQUEPARTS
UNIQUEPARTS_I1
5
UNIQUEPARTS
UNIQUEPARTS_I1
6
UNIQUEPARTS
UNIQUEPARTS_I2
1
TABLE_NAME
INDEX_NAME
COLUMN_POSITION
------------------------------ ------------------------------ ---------------
UNIQUEPARTS
UNIQUEPARTS_I2
2
UNIQUEPARTS
UNIQUEPARTS_I3
1
UNIQUEPARTS
UNIQUEPARTS_I3
2
UNIQUEPARTS
UNIQUEPARTS_I4
1
UNIQUEPARTS
UNIQUEPARTS_I5
1
16 rows selected.
SQL> COLUMN index_nameFORMAT A30
COLUMN column_name FORMAT A30
SELECT a.index_name,
a.column_name,
a.column_position,
b.index_type
FROM all_ind_columns a,
all_indexes b
WHEREb.table_name = Upper('&&1')
ANDb.owner= Upper('&&2')
ANDb.index_name = a.index_name
ANDb.owner= a.index_owner
ORDER BY 1,3;
SQL> SQL> 23456789 10 11old 7:WHEREb.table_name = Upper('&&1')
new 7:WHEREb.table_name = Upper('DISPATCH')
old 8:AND b.owner= Upper('&&2')
new 8:AND b.owner= Upper('SZHQUALITY')
INDEX_NAME
COLUMN_NAME
COLUMN_POSITION INDEX_TYPE
------------------------------ ------------------------------ --------------- ---------------------------
DISPATCH_I1
WHAT
1 NORMAL
DISPATCH_I1
STATE
2 NORMAL
DISPATCH_U1
UNIQUEPART_ID
1 NORMAL
DISPATCH_U1
LOCATION_ID
2 NORMAL
DISPATCH_U1
WHAT
3 NORMAL
DISPATCH_U1
STATE
4 NORMAL
6 rows selected.
SQL> explain plan for INSERT
INTO SZHQUALITY.DISPATCH
(
UNIQUEPART_ID,
WHAT,
STATE
)
SELECT UNIQUEPART_ID,
'XML_ARCHIVE' AS WHAT,
1 AS STATE
FROM
(
SELECT DISTINCT U.UNIQUEPART_ID
FROM SZHQUALITY.UNI23456789 10 11 12 13 14QUEPARTS U
LEFT JOIN SZHQUALITY.COMPONENTS C
ON U.UNIQUEPART_ID = C.COMPONENTIDENTIFIER
LEFT JOIN SZHQUALITY.DISPATCH D
ON U.UNIQUEPART_ID = D.UNIQUEPART_ID
AND D.WHAT = 'XML_ARCHIVE'
WHERE (U.ARCHIVE_FLAG = 1)
AND (:B3 = 1 15 16 17 18 19 20 2100
OR U.RESULT_STATE = :B3 )
AND (:B2 IS NULL
OR PART_CLASS = :B2 )
AND (U.RESULT_DATEselect * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
| Id| Operation
| Name
| Rows| Bytes | Cost| Pstart| Pstop |
-----------------------------------------------------------------------------------------------------
| 0 | INSERT STATEMENT
|
|
1 | 42 |
938K|
|
|
| 1 |LOAD TABLE CONVENTIONAL
| DISPATCH
|
|
|
|
|
|
| 2 | COUNT STOPKEY
|
|
|
|
|
|
|
| 3 |VIEW
|
|
1 | 42 |
938K|
|
|
| 4 | SORT GROUP BY STOPKEY
|
|
1 |
133 |
938K|
|
|
| 5 |FILTER
|
|
|
|
|
|
|
| 6 | NESTED LOOPS OUTER
|
|
127 | 16891 |
938K|
|
|
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 7 |FILTER
|
|
|
|
|
|
|
| 8 |
HASH JOIN OUTER
|
|
128 | 11648 |
485K|
|
|
| 9 |
TABLE ACCESS FULL
| UNIQUEPARTS | 12837 |
601K|
484K|
|
|
|10 |
TABLE ACCESS BY INDEX ROWID| DISPATCH
|
106K|4471K|
765 |
|
|
|11 |
INDEX RANGE SCAN
| DISPATCH_I1 |
106K|
|
374 |
|
|
|12 |PARTITION RANGE ALL
|
|1107K| 44M|3544 |
1 |1048575|
|13 |
INDEX RANGE SCAN
| COMPONENTS_I2 |1107K| 44M|3544 |
1 |1048575|
-----------------------------------------------------------------------------------------------------
Note
-----
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 'PLAN_TABLE' is old version
23 rows selected.
|