filter这个词总让人很费解,它下一级可以挂 一个子节点,二个子节点,三个子节点...。挂一个子节点意思过滤,如对全表进行扫描后挂一个子节点意思过滤,如对全表进行扫描后,,按照条件过滤,丢弃不满足条件的数据。
挂二个子节点类似是nest loop。
挂三个子节点类似1和2做nest loop,结果集再与3做nest loop(这个是我推测的)。
SQL> set linesize 300 SQL> set timing on SQL> set autotrace traceonly SQL> SELECT count(DISTINCT BI.RISK_BASE_ID) count 2 FROM GG_RISK_BASE_INFO BI,3 GG_TASK_FORM_CLASSTEMPLATE FC,4 GG_TASK_FORM_TEMPLATEVERSION FT,5 GG_TASK_FORM_RELATIONTEMPLAT FR,6 GG_TASK_WORK_SHEET WS,7 GG_TASK_FORM_EXETASKRECORD FE 8 WHERE FC.RISK_BASE_ID = BI.RISK_BASE_ID 9 and FT.TEMPLATE_FID = FC.TEMPLATE_ID 10 and FR.TEMPLATE_VERSION_ID = FT.TEMPLATE_VERSION_ID 11 and FR.OBJECT_ID = WS.WORK_SHEET_ID 12 and FE.REL_TEMP_ID = FR.REL_TEMP_ID 13 and FR.REL_OBJECT_TYPE = '1'14 AND FE.TASK_START_TIME > BI.RISK_ASSESS_TIME 15 and (exists 16 (SELECT 1 17 FROM GG_TASK_FORM_RISK_CTL_LOG CL 18 where CL.TEMPLATE_VERSION_ID = FT.TEMPLATE_VERSION_ID) or exists 19 (SELECT 1 20 FROM GG_TASK_FORM_NEW_RISK_INFO RI 21 where RI.REL_TEMP_ID = FR.REL_TEMP_ID));已用时间: 00: 04: 10.36执行计划
数据规模:
select count(1) from GG_RISK_BASE_INFO; --2828 select count(1) from GG_TASK_FORM_CLASSTEMPLATE; --5600 select count(1) from GG_TASK_FORM_TEMPLATEVERSION; --7646 select count(1) from GG_TASK_FORM_EXETASKRECORD; --33064 select count(1) from GG_TASK_FORM_RELATIONTEMPLAT; --67319 select count(1) from GG_TASK_FORM_RISK_CTL_LOG;--5210 select count(1) from GG_TASK_FORM_NEW_RISK_INFO;--27831 CREATE INDEX IDX_PTNRI_REL_TEMP_ID ON GG_TASK_FORM_NEW_RISK_INFO(REL_TEMP_ID);CREATE INDEX IDX_PTFRCL_REL_T_V_ID ON GG_TASK_FORM_RISK_CTL_LOG(TEMPLATE_VERSION_ID);
