Sql 我们可以进一步优化Oracle查询吗?
此查询需要2.17秒的时间,输出中的行数为128000。所有源表都有大约100k行。但同一查询有时会在生产时间内花费更多的时间,这是系统运行缓慢的原因,如Oracle 11g中前5个非常耗时的查询所示。我们可以进一步优化它吗 注意:为Where和On条件中使用的所有列创建索引。还可以找到附加的查询计划Sql 我们可以进一步优化Oracle查询吗?,sql,oracle,query-optimization,Sql,Oracle,Query Optimization,此查询需要2.17秒的时间,输出中的行数为128000。所有源表都有大约100k行。但同一查询有时会在生产时间内花费更多的时间,这是系统运行缓慢的原因,如Oracle 11g中前5个非常耗时的查询所示。我们可以进一步优化它吗 注意:为Where和On条件中使用的所有列创建索引。还可以找到附加的查询计划 SELECT (ROWNUM)ROWNUMBER, RES.* FROM (SELECT PID
SELECT (ROWNUM)ROWNUMBER, RES.*
FROM
(SELECT PIDS,
FILENUM,
FILETYPE,
ATT,
FILESTA,
WSNAME,
CMP5.CLT_NAME AS CLIENT,
CLT_CODE,
CLTREF,
TMTYPE,
ASSOCNAME,
FFCOUNTRY,
APPLICATIONNO,
FF_APPLICATIONNO,
FILING_TRADEMARKTITLE,
FF_TRADEMARKTITLE,
QUERY_TRADEMARKTITLE,
CMP6.DOCNAME AS SEARCH_TRADEMARKTITLE,
CMP7.DOCUMENTNAME as FF_SEARCH_TRADEMARK,
CMP.CLASS AS CLASSES,
CMP4.CLASS AS CLASSESFF,
CMP2.NAME AS PROPRIETER,
CMP2.CODE AS PROPRIETERCODE,
CMP5.CNTRY AS CNTRY,
CMP5.STATE AS STATE,
CMP5.CITY AS CITY
FROM
(SELECT EXT.PID AS PIDS,
EXT.FILE_NUMBER AS FILENUM,
EXT.proceeding_assignmenttype AS FILETYPE,
EXT.ATTORNEY AS ATT,
EXT.FILE_STATUS AS FILESTA,
CURRENTWS AS WSNAME,
EXT.CLIENT_CODE AS CLT_CODE,
EXT.client_ref AS CLTREF,
EXT.FP_APP_TYPE AS TMTYPE,
EXT.ff_nameofassociate AS ASSOCNAME,
EXT.ff_nameofcountry AS FFCOUNTRY,
EXT.filing_trademarkno AS APPLICATIONNO,
EXT.ff_trademarknumber AS FF_APPLICATIONNO,
EXT.FILING_TRADEMARK AS FILING_TRADEMARKTITLE,
EXT.FF_TRADMARK AS FF_TRADEMARKTITLE,
EXT.Q_TRADEMARK AS QUERY_TRADEMARKTITLE
FROM EXT_TRADEMARK EXT
WHERE CURRENTWSSTATUS = '1'
ORDER BY EXT.FILE_NUMBER DESC
)EXTTABLE
LEFT JOIN COMPLEX_TM_CLASS CMP
ON EXTTABLE.PIDS = CMP.PROCESSINSTANCEID
LEFT JOIN COMPLEX_TM_PROPRIEATOR CMP2
ON EXTTABLE.PIDS = CMP2.PROCESSINSTANCEID
LEFT JOIN COMPLEX_TM_FF_CLASS CMP4
ON EXTTABLE.PIDS = CMP4.PROCESSINSTANCEID
LEFT JOIN FA_CLT_MSTR CMP5
ON EXTTABLE.CLT_CODE = CMP5.CLT_COD
LEFT JOIN COMPLEX_TM_SEARCH CMP6
ON EXTTABLE.PIDS = CMP6.PID
LEFT JOIN COMPLEX_TM_FF_SEARCH CMP7
ON EXTTABLE.PIDS = CMP7.PID order by FILENUM desc
) RES ;
您可以从删除嵌套子查询开始。这完全没有必要。另外,
CURRENTWSSTATUS
列的类型是什么?如果它是一个数字,你不应该使用单引号,因为这将做隐式转换,速度非常慢。如果它是一个VARCHAR栏,你只在上面有数字,考虑改变它的类型。谢谢@ JorgeCampos评论。在CURRENTWSSTATUS列中有字母数字值。直接用表名替换子查询可以提高性能,对吗?。将在这里分享结果。是的,它肯定会改进它。此外,在您的解释计划中没有提到正在使用的索引。为左联接操作中使用的表/列创建索引。这将改进得更好。您可以从删除嵌套子查询开始。这完全没有必要。另外,CURRENTWSSTATUS
列的类型是什么?如果它是一个数字,你不应该使用单引号,因为这将做隐式转换,速度非常慢。如果它是一个VARCHAR栏,你只在上面有数字,考虑改变它的类型。谢谢@ JorgeCampos评论。在CURRENTWSSTATUS列中有字母数字值。直接用表名替换子查询可以提高性能,对吗?。将在这里分享结果。是的,它肯定会改进它。此外,在您的解释计划中没有提到正在使用的索引。为左联接操作中使用的表/列创建索引。这将改善得更好。