【发布时间】:2019-09-03 09:17:19
【问题描述】:
尝试执行选择查询,该查询基本上使用正则表达式将列中的多个值转换为多行 -
select INCIDENTID, trim(regexp_substr(CASUALFACTORS,'[^,]+', 1, level) ) value
FROM PSA.HSERS_INCIDENT_PSA WHERE ACTIVE_FLAG='1'
AND ISDELETED = 'F'
connect by regexp_substr(CASUALFACTORS, '[^,]+', 1, level) is not null
order by INCIDENTID
在解释计划中查询的成本为 3206,基数为 1,08,849。
仍然需要很长时间才能执行(即使在 30 分钟后也会继续)。
请提出建议。
之前的想法是使用 XML 表来创建这个 SQL,但成本更高 -
SELECT INCIDENTID,
COLUMN_VALUE AS CASUALFACTORS
FROM (
SELECT INCIDENTID,
CASUALFACTORS AS STR
FROM PSA.HSERS_INCIDENT_PSA
WHERE ACTIVE_FLAG='1'
AND ISDELETED = 'F'
) T,
XMLTABLE ( ('"' || REPLACE (str, ',', '","') || '"'))
Sample data -
select incidentid, dbms_lob.substr(CASUALFACTORS,3000)
from PSA.HSERS_INCIDENT_PSA WHERE ACTIVE_FLAG='1'
AND ISDELETED = 'F' and incidentid = 526849
526849 8,7,26
There are no duplicates for incidentid column in the table
DDL for the table -
ALTER TABLE PSA.HSERS_INCIDENT_PSA
DROP PRIMARY KEY CASCADE;
DROP TABLE PSA.HSERS_INCIDENT_PSA CASCADE CONSTRAINTS;
CREATE TABLE PSA.HSERS_INCIDENT_PSA
(
INCIDENTID INTEGER,
INCIDENTTYPE INTEGER,
SUPPLEMENTALINCIDENTTYPE INTEGER,
PENDINGREVIEW VARCHAR2(1 BYTE),
NEARMISSTYPE INTEGER,
NEARMISSSUBCONTRACTOR INTEGER,
RELEASEDATE TIMESTAMP(6),
NEARMISSIDENTIFICATION INTEGER,
NEARMISSCATEGORY INTEGER,
PROFITCENTER VARCHAR2(10 BYTE),
INCIDENTNUMBER NUMBER(19),
INCIDENTCODE VARCHAR2(15 BYTE),
HIRNUMBER VARCHAR2(8 BYTE),
REDBORDERALERTSENT VARCHAR2(1 BYTE),
TASKORDER VARCHAR2(3 BYTE),
LOGCAPAREA INTEGER,
TEAMCONNECTNUMBER VARCHAR2(20 BYTE),
INCIDENTDATE TIMESTAMP(6),
INCIDENTTIME VARCHAR2(10 BYTE),
REPORTDATE TIMESTAMP(6),
REPORTTIME VARCHAR2(5 BYTE),
INSERTDATETIME TIMESTAMP(6),
REPORTEDBY VARCHAR2(40 BYTE),
SUPERVISOR1 VARCHAR2(40 BYTE),
SUPERVISOR2 VARCHAR2(40 BYTE),
CLIENT INTEGER,
PROJECTLOCATION INTEGER,
INCIDENTAREA INTEGER,
INCIDENTLOCATION INTEGER,
INCIDENTAREADESCRIPTION VARCHAR2(80 BYTE),
DRUGALCOHOLTEST INTEGER,
NODRUGTESTRESPONSE INTEGER,
NODRUGTESTCOMMENTS CLOB,
FACTS CLOB,
POTENTIALCONSEQUENCES INTEGER,
LIKELIHOODRATING INTEGER,
RISKASSESSMENTSEVERITY INTEGER,
COVEREDBYTSTI_JSA VARCHAR2(1 BYTE),
INJURINGEVENTDISCUSSEDTSTI_JSA VARCHAR2(1 BYTE),
EXTERNALASSESSMENTFINEASSESED NUMBER(15,2),
REGULATORYAGENCY INTEGER,
INSPECTIONNUMBER VARCHAR2(12 BYTE),
INSPECTIONRESULTS INTEGER,
INSPECTIONCLOSEDATE TIMESTAMP(6),
EXTERNALASSESSMENTSEVERITY INTEGER,
CORRECTIVEMEASURES CLOB,
WITNESSDETAILS CLOB,
EXTERNALINVESTIGATORCOMMENTS CLOB,
CREATEDBY VARCHAR2(50 BYTE),
CREATEDON TIMESTAMP(6),
UPDATEDBY VARCHAR2(50 BYTE),
UPDATEDON TIMESTAMP(6),
ISDELETED VARCHAR2(1 BYTE),
INCIDENTSTATUS VARCHAR2(50 BYTE),
PARENTINCIDENTID NUMBER(19),
KEYSTOLIFE CLOB,
OFFICEBEHAVIORS CLOB,
CASUALFACTORS CLOB,
STANDARDSVIOLATED CLOB,
SUBCONTRACTORADDRESS CLOB,
CONFIDENTIALFACTS CLOB,
LASTVISITEDTAB VARCHAR2(50 BYTE),
LAST_RQST_ID VARCHAR2(60 BYTE),
DATA_SYS_SK VARCHAR2(3 BYTE),
CREATED_BY VARCHAR2(50 BYTE),
CREATED_DDTM DATE,
LAST_MODIFIED_BY VARCHAR2(50 BYTE),
LAST_MODIFIED_DDTM DATE,
ACTIVE_FLAG VARCHAR2(1 BYTE)
)
LOB (NODRUGTESTCOMMENTS) STORE AS (
TABLESPACE PSA_DATA
ENABLE STORAGE IN ROW
CHUNK 16384
RETENTION
NOCACHE
LOGGING
STORAGE (
INITIAL 80K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
))
LOB (FACTS) STORE AS (
TABLESPACE PSA_DATA
ENABLE STORAGE IN ROW
CHUNK 16384
RETENTION
NOCACHE
LOGGING
STORAGE (
INITIAL 80K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
))
LOB (CORRECTIVEMEASURES) STORE AS (
TABLESPACE PSA_DATA
ENABLE STORAGE IN ROW
CHUNK 16384
RETENTION
NOCACHE
LOGGING
STORAGE (
INITIAL 80K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
))
LOB (WITNESSDETAILS) STORE AS (
TABLESPACE PSA_DATA
ENABLE STORAGE IN ROW
CHUNK 16384
RETENTION
NOCACHE
LOGGING
STORAGE (
INITIAL 80K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
))
LOB (EXTERNALINVESTIGATORCOMMENTS) STORE AS (
TABLESPACE PSA_DATA
ENABLE STORAGE IN ROW
CHUNK 16384
RETENTION
NOCACHE
LOGGING
STORAGE (
INITIAL 80K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
))
LOB (KEYSTOLIFE) STORE AS (
TABLESPACE PSA_DATA
ENABLE STORAGE IN ROW
CHUNK 16384
RETENTION
NOCACHE
LOGGING
STORAGE (
INITIAL 80K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
))
LOB (OFFICEBEHAVIORS) STORE AS (
TABLESPACE PSA_DATA
ENABLE STORAGE IN ROW
CHUNK 16384
RETENTION
NOCACHE
LOGGING
STORAGE (
INITIAL 80K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
))
LOB (CASUALFACTORS) STORE AS (
TABLESPACE PSA_DATA
ENABLE STORAGE IN ROW
CHUNK 16384
RETENTION
NOCACHE
LOGGING
STORAGE (
INITIAL 80K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
))
LOB (STANDARDSVIOLATED) STORE AS (
TABLESPACE PSA_DATA
ENABLE STORAGE IN ROW
CHUNK 16384
RETENTION
NOCACHE
LOGGING
STORAGE (
INITIAL 80K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
))
LOB (SUBCONTRACTORADDRESS) STORE AS (
TABLESPACE PSA_DATA
ENABLE STORAGE IN ROW
CHUNK 16384
RETENTION
NOCACHE
LOGGING
STORAGE (
INITIAL 80K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
))
LOB (CONFIDENTIALFACTS) STORE AS (
TABLESPACE PSA_DATA
ENABLE STORAGE IN ROW
CHUNK 16384
RETENTION
NOCACHE
LOGGING
STORAGE (
INITIAL 80K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
))
TABLESPACE PSA_DATA
RESULT_CACHE (MODE DEFAULT)
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 80K
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
-- There is no statement for index PSA.SYS_C002335882.
-- The object is created when the parent object is created.
CREATE OR REPLACE SYNONYM BI_REPORTS_USER.HSERS_INCIDENT_PSA FOR PSA.HSERS_INCIDENT_PSA;
ALTER TABLE PSA.HSERS_INCIDENT_PSA ADD (
PRIMARY KEY
(INCIDENTID, LAST_RQST_ID)
USING INDEX
TABLESPACE PSA_DATA
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 80K
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
ENABLE VALIDATE);
【问题讨论】:
-
请edit您的问题添加一些示例数据。您给出的第一个查询无法在层次结构的不同级别中的行之间建立关联,因此如果有多个输入行,随着层次结构级别的增加,它将创建成倍增加的重复行;这就是为什么重要的是要知道您输入的内容,因为单行会“工作”,但多行可能会创建数百万个您不期望的重复行。
-
Oracle 性能调优很棘手,因为有很多因素在起作用。请阅读this answer in another SO thread,其中解释了我们回答您的问题所需的信息。它还可能为您提供足够的关于调整的线索,您可以自己解决。
标签: sql oracle performance