【发布时间】:2014-09-04 18:42:05
【问题描述】:
我正在使用 Oracle 11g。我有一个查询需要很长时间才能执行 150,000 条记录。
查询是:
insert /*+ APPEND NOLOGGING */ into CONCEPT_COUNTS_DIMENSION
(select fa.c_fullname AS CONCEPT_PATH ,ltrim(SUBSTR(fa.c_fullname, 1,instr(fa.c_fullname, '\',-1,2))) AS PARENT_CONCEPT_PATH,count(distinct tpm.encounter_num) AS value,'Document_Count' as type
from "I2B2METADATA"."I2B2_toinsert" fa ,"I2B2METADATA"."I2B2_toinsert" la ,I2B2DEMODATA.OBSERVATION_FACT_to_insert tpm ,i2b2demodata.PATIENT_DIMENSION p where
fa.c_fullname like '\a\b\c\%' and
la.c_fullname like fa.c_fullname || '%' escape '`'
/* and la.c_visualattributes like 'L%' */
and tpm.patient_num = p.patient_num
and la.c_basecode = tpm.concept_cd
group by fa.c_fullname ,ltrim(SUBSTR(fa.c_fullname, 1,instr(fa.c_fullname, '\',-1,2))));
此查询将一个表与其自身和 2 个其他表连接起来,并为其下方的路径选择不同数量的患者。
任何人都可以建议如何调整此查询以使其更快。我验证了这些表的索引并为 1% 的数据生成了统计信息。有什么其他方法可以加快速度吗?
【问题讨论】:
-
请看“解释计划”,然后你可以得到关于在哪里改进你的查询的提示docs.oracle.com/cd/B10500_01/server.920/a96533/ex_plan.htm