Oracle 使用索引优化运行时
我有一个分层查询,目前大约以1.1秒的速度执行200万行。 如您所见,它由日期分隔。 带索引Oracle 使用索引优化运行时,oracle,oracle19c,Oracle,Oracle19c,我有一个分层查询,目前大约以1.1秒的速度执行200万行。 如您所见,它由日期分隔。 带索引 SELECT * from ( SELECT * FROM zhr_struct_jmk4 WHERE id >= 9000000 AND ID <= 100000000 AND SBEGD <= :iv_begda AND sendd >= :iv_endda ) a start wit
SELECT *
from ( SELECT * FROM zhr_struct_jmk4
WHERE
id >= 9000000 AND ID <= 100000000
AND SBEGD <= :iv_begda
AND sendd >= :iv_endda ) a
start with objid = '72002506'
connect BY prior a.id = a.sobid
数据是一个组织层次结构,职位和人员均以日期分隔。因此,日期范围。我正试图根据给定的日期构建层次结构
以下是两个执行计划,包括和不包括拟定索引。实际上,现在使用索引时,它的运行速度变慢了
SQL Statement
----------------------------------------------------------------------------------------------------------------------
SELECT
*
FROM
( SELECT * FROM zhr_struct_jmk4 WHERE id >= 9000000 AND ID <= 100000000 AND SBEGD <= :A0 AND send
d >= :A1 ) a start with objid = '72002506' connect BY prior a.id = a.sobid
Execution Plan
----------------------------------------------------------------------------------------------------------------------
System: HEV
Plan hash value: 1950817222
--------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 5 | 1375 | 26 (12)| 00:00:01 |
|* 1 | CONNECT BY NO FILTERING WITH START-WITH| | | | | |
| 2 | TABLE ACCESS BY INDEX ROWID BATCHED | ZHR_STRUCT_JMK4 | 2736 | 665K| 24 (5)| 00:00:01 |
|* 3 | INDEX RANGE SCAN | ZHR_STRUCT_JMK4~ZZ | 1 | | 24 (5)| 00:00:01 |
--------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1
2 - SEL$E029B2FF / ZHR_STRUCT_JMK4@SEL$5
3 - SEL$E029B2FF / ZHR_STRUCT_JMK4@SEL$5
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("ZHR_STRUCT_JMK4"."SOBID"=PRIOR "ZHR_STRUCT_JMK4"."ID")
filter("ZHR_STRUCT_JMK4"."OBJID"='72002506')
3 - access("SENDD">=:A1 AND "ID">=9000000 AND "SBEGD"<=:A0 AND "ID"<=100000000)
filter("ID">=9000000 AND "ID"<=100000000 AND "SENDD">=:A1)
Column Projection Information (identified by operation id):
-----------------------------------------------------------
1 - "ZHR_STRUCT_JMK4"."MANDT"[VARCHAR2,9], "ZHR_STRUCT_JMK4"."ID"[NUMBER,22],
"ZHR_STRUCT_JMK4"."SBEGD"[VARCHAR2,24], "ZHR_STRUCT_JMK4"."SENDD"[VARCHAR2,24],
"ZHR_STRUCT_JMK4"."SEQNR"[NUMBER,22], "ZHR_STRUCT_JMK4"."SLEVEL"[NUMBER,22],
"ZHR_STRUCT_JMK4"."OTYPE"[VARCHAR2,6], "ZHR_STRUCT_JMK4"."OBJID"[VARCHAR2,135],
"ZHR_STRUCT_JMK4"."PDOWN"[NUMBER,22], "ZHR_STRUCT_JMK4"."PNEXT"[NUMBER,22],
"ZHR_STRUCT_JMK4"."PUP"[NUMBER,22], "ZHR_STRUCT_JMK4"."PPREV"[NUMBER,22],
"ZHR_STRUCT_JMK4"."VRSIGN"[VARCHAR2,3], "ZHR_STRUCT_JMK4"."VRELAT"[VARCHAR2,9],
"ZHR_STRUCT_JMK4"."VBEGDA"[VARCHAR2,24], "ZHR_STRUCT_JMK4"."VENDDA"[VARCHAR2,24],
"ZHR_STRUCT_JMK4"."SOBID"[NUMBER,22], "ZHR_STRUCT_JMK4"."SOBID"[NUMBER,22],
"ZHR_STRUCT_JMK4"."ID"[NUMBER,22], PRIOR NULL[22], LEVEL[4]
2 - "ZHR_STRUCT_JMK4".ROWID[ROWID,10], "ZHR_STRUCT_JMK4"."MANDT"[VARCHAR2,9], "ID"[NUMBER,22],
"SBEGD"[VARCHAR2,24], "SENDD"[VARCHAR2,24], "ZHR_STRUCT_JMK4"."SEQNR"[NUMBER,22],
"ZHR_STRUCT_JMK4"."SLEVEL"[NUMBER,22], "ZHR_STRUCT_JMK4"."OTYPE"[VARCHAR2,6],
"ZHR_STRUCT_JMK4"."OBJID"[VARCHAR2,135], "ZHR_STRUCT_JMK4"."PDOWN"[NUMBER,22],
"ZHR_STRUCT_JMK4"."PNEXT"[NUMBER,22], "ZHR_STRUCT_JMK4"."PUP"[NUMBER,22],
"ZHR_STRUCT_JMK4"."PPREV"[NUMBER,22], "ZHR_STRUCT_JMK4"."VRSIGN"[VARCHAR2,3],
"ZHR_STRUCT_JMK4"."VRELAT"[VARCHAR2,9], "ZHR_STRUCT_JMK4"."VBEGDA"[VARCHAR2,24],
"ZHR_STRUCT_JMK4"."VENDDA"[VARCHAR2,24], "ZHR_STRUCT_JMK4"."SOBID"[NUMBER,22]
3 - "ZHR_STRUCT_JMK4".ROWID[ROWID,10], "SBEGD"[VARCHAR2,24], "SENDD"[VARCHAR2,24],
"ID"[NUMBER,22], "ZHR_STRUCT_JMK4"."SOBID"[NUMBER,22]
Note
-----
- dynamic statistics used: dynamic sampling (level=2)
无索引:
SQL Statement
----------------------------------------------------------------------------------------------------------------------
SELECT
*
FROM
( SELECT * FROM zhr_struct_jmk4 WHERE id >= 9000000 AND ID <= 100000000 AND SBEGD <= :A0 AND send
d >= :A1 ) a start with objid = '72002506' connect BY prior a.id = a.sobid
Execution Plan
----------------------------------------------------------------------------------------------------------------------
System: HEV
Plan hash value: 3515252885
-----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 5 | 1375 | 4421 (12)| 00:00:01 |
|* 1 | CONNECT BY NO FILTERING WITH START-WITH| | | | | |
|* 2 | TABLE ACCESS FULL | ZHR_STRUCT_JMK4 | 2736 | 665K| 4418 (11)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1
2 - SEL$E029B2FF / ZHR_STRUCT_JMK4@SEL$5
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("ZHR_STRUCT_JMK4"."SOBID"=PRIOR "ZHR_STRUCT_JMK4"."ID")
filter("ZHR_STRUCT_JMK4"."OBJID"='72002506')
2 - filter("ID">=9000000 AND "ID"<=100000000 AND "SBEGD"<=:A0 AND "SENDD">=:A1)
Column Projection Information (identified by operation id):
-----------------------------------------------------------
1 - "ZHR_STRUCT_JMK4"."MANDT"[VARCHAR2,9], "ZHR_STRUCT_JMK4"."ID"[NUMBER,22],
"ZHR_STRUCT_JMK4"."SBEGD"[VARCHAR2,24], "ZHR_STRUCT_JMK4"."SENDD"[VARCHAR2,24],
"ZHR_STRUCT_JMK4"."SEQNR"[NUMBER,22], "ZHR_STRUCT_JMK4"."SLEVEL"[NUMBER,22],
"ZHR_STRUCT_JMK4"."OTYPE"[VARCHAR2,6], "ZHR_STRUCT_JMK4"."OBJID"[VARCHAR2,135],
"ZHR_STRUCT_JMK4"."PDOWN"[NUMBER,22], "ZHR_STRUCT_JMK4"."PNEXT"[NUMBER,22],
"ZHR_STRUCT_JMK4"."PUP"[NUMBER,22], "ZHR_STRUCT_JMK4"."PPREV"[NUMBER,22],
"ZHR_STRUCT_JMK4"."VRSIGN"[VARCHAR2,3], "ZHR_STRUCT_JMK4"."VRELAT"[VARCHAR2,9],
"ZHR_STRUCT_JMK4"."VBEGDA"[VARCHAR2,24], "ZHR_STRUCT_JMK4"."VENDDA"[VARCHAR2,24],
"ZHR_STRUCT_JMK4"."SOBID"[NUMBER,22], "ZHR_STRUCT_JMK4"."SOBID"[NUMBER,22],
"ZHR_STRUCT_JMK4"."ID"[NUMBER,22], PRIOR NULL[22], LEVEL[4]
2 - "ZHR_STRUCT_JMK4"."MANDT"[VARCHAR2,9], "ID"[NUMBER,22], "SBEGD"[VARCHAR2,24],
"SENDD"[VARCHAR2,24], "ZHR_STRUCT_JMK4"."SEQNR"[NUMBER,22], "ZHR_STRUCT_JMK4"."SLEVEL"[NUMBER,22],
"ZHR_STRUCT_JMK4"."OTYPE"[VARCHAR2,6], "ZHR_STRUCT_JMK4"."OBJID"[VARCHAR2,135],
"ZHR_STRUCT_JMK4"."PDOWN"[NUMBER,22], "ZHR_STRUCT_JMK4"."PNEXT"[NUMBER,22],
"ZHR_STRUCT_JMK4"."PUP"[NUMBER,22], "ZHR_STRUCT_JMK4"."PPREV"[NUMBER,22],
"ZHR_STRUCT_JMK4"."VRSIGN"[VARCHAR2,3], "ZHR_STRUCT_JMK4"."VRELAT"[VARCHAR2,9],
"ZHR_STRUCT_JMK4"."VBEGDA"[VARCHAR2,24], "ZHR_STRUCT_JMK4"."VENDDA"[VARCHAR2,24],
"ZHR_STRUCT_JMK4"."SOBID"[NUMBER,22]
Note
-----
- dynamic statistics used: dynamic sampling (level=2)
DB版本:Oracle 19.9您应该在SBEGD、SENDD、OBJID和SOBID上有索引。然后收集该表的统计信息。请共享您已经构建的索引和执行计划。不一定有一个索引可以帮助您将日期与=。索引最适合检索小部分数据,但基于范围的日期比较通常会返回大部分数据。如果您能分享有关数据和执行计划的信息,可能会对我们有所帮助。@ankit bajpai我编辑了上面的答案供您参考