Sql Oracle查询连接时速度慢,拆分为两个查询时速度快
我有一个sql查询,它在连接两个表时非常慢,但在第一次查询一个表并使用其输出查询另一个表时速度很快 环境/先决条件 Oracle版本:Sql Oracle查询连接时速度慢,拆分为两个查询时速度快,sql,performance,oracle,query-optimization,sql-execution-plan,Sql,Performance,Oracle,Query Optimization,Sql Execution Plan,我有一个sql查询,它在连接两个表时非常慢,但在第一次查询一个表并使用其输出查询另一个表时速度很快 环境/先决条件 Oracle版本: Oracle数据库11g企业版11.2.0.3.0版-64位生产 涉及的对象: cfc_物化(物化视图,2150万行) 触点(表,12,6百万行) 涉及的索引: 在联系人(客户端)上创建索引联系人(客户端) 在CFC_MATERIALIZED上创建索引CFC_MATERIALIZED(关联类型、源ID、目标ID) 我已经用cascade=>true重新计算了这两
Oracle数据库11g企业版11.2.0.3.0版-64位生产 涉及的对象:
cfc_物化(物化视图,2150万行)
触点(表,12,6百万行) 涉及的索引:
在联系人(客户端)上创建索引联系人(客户端)
在CFC_MATERIALIZED上创建索引CFC_MATERIALIZED(关联类型、源ID、目标ID) 我已经用cascade=>true重新计算了这两个表的统计数据:
BEGIN
SYS.DBMS_STATS.GATHER_TABLE_STATS (
OwnName => '...'
,TabName => '...'
,Estimate_Percent => 0
,Degree => 4
,Cascade => TRUE
,No_Invalidate => FALSE);
END;
/
问题
我有以下疑问:
SELECT c.*
FROM contact c
WHERE c.client in (
SELECT cfc.targetid
FROM cfc_materialized cfc
WHERE cfc.sourceid = 'e95027f0-a83e-11e3-a0ae-005056aebabc'
AND cfc.association_type = 'ContactDataSharing'
)
AND c.deleted = 0;
解释计划:
--------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 11M| 2214M| 38976 (1)| 00:07:48 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | | | | | Q1,01 | P->S | QC (RAND) |
| 3 | NESTED LOOPS | | | | | | Q1,01 | PCWP | |
| 4 | NESTED LOOPS | | 11M| 2214M| 38976 (1)| 00:07:48 | Q1,01 | PCWP | |
| 5 | SORT UNIQUE | | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,01 | PCWP | |
| 6 | PX RECEIVE | | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,01 | PCWP | |
| 7 | PX SEND HASH | :TQ10000 | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,00 | P->P | HASH |
| 8 | PX BLOCK ITERATOR | | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,00 | PCWC | |
|* 9 | MAT_VIEW ACCESS FULL | CFC_MATERIALIZED | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,00 | PCWP | |
|* 10 | INDEX RANGE SCAN | CONTACT_CLIENT | 5500 | | 37 (0)| 00:00:01 | Q1,01 | PCWP | |
|* 11 | TABLE ACCESS BY INDEX ROWID| CONTACT | 5474 | 550K| 973 (0)| 00:00:12 | Q1,01 | PCWP | |
--------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
9 - filter("CFC"."SOURCEID"='e95027f0-a83e-11e3-a0ae-005056aebabc' AND "CFC"."ASSOCIATION_TYPE"='ContactDataSharing')
10 - access("C"."CLIENT"="CFC"."TARGETID")
11 - filter("C"."DELETED"=0)enter code here
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2164 | 196K| 36 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| CFC_MATERIALIZED_A_S_T | 2164 | 196K| 36 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("CFC"."ASSOCIATION_TYPE"='ContactDataSharing' AND
"CFC"."SOURCEID"='e95027f0-a83e-11e3-a0ae-005056aebabc')
-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2814 | 283K| 505 (0)| 00:00:07 |
| 1 | INLIST ITERATOR | | | | | |
|* 2 | TABLE ACCESS BY INDEX ROWID| CONTACT | 2814 | 283K| 505 (0)| 00:00:07 |
|* 3 | INDEX RANGE SCAN | CONTACT_CLIENT | 2827 | | 23 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("C"."DELETED"=0)
3 - access("C"."CLIENT"='e95027f0-a83e-11e3-a0ae-005056aebabc' OR
"C"."CLIENT"='eb37d3b0-a83e-11e3-a0ae-005056aebabc')
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 11M| 2214M| 305K (1)| 01:01:09 |
| 1 | NESTED LOOPS | | | | | |
| 2 | NESTED LOOPS | | 11M| 2214M| 305K (1)| 01:01:09 |
| 3 | SORT UNIQUE | | 2164 | 196K| 36 (0)| 00:00:01 |
|* 4 | INDEX RANGE SCAN | CFC_MATERIALIZED_A_S_T | 2164 | 196K| 36 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | CONTACT_CLIENT | 5500 | | 37 (0)| 00:00:01 |
|* 6 | TABLE ACCESS BY INDEX ROWID| CONTACT | 5474 | 550K| 973 (0)| 00:00:12 |
-------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("CFC"."ASSOCIATION_TYPE"='ContactDataSharing' AND
"CFC"."SOURCEID"='e95027f0-a83e-11e3-a0ae-005056aebabc')
5 - access("C"."CLIENT"="CFC"."TARGETID")
6 - filter("C"."DELETED"=0)
这需要相当长的时间,我想知道为什么有一个完全访问cfc_实现。
当我将查询分为两个查询时,速度要快得多。
第一个问题:
SELECT cfc.targetid
FROM cfc_materialized cfc
WHERE cfc.sourceid = 'e95027f0-a83e-11e3-a0ae-005056aebabc'
AND cfc.association_type = 'ContactDataSharing';
此查询返回2个targetID。
解释计划:
--------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 11M| 2214M| 38976 (1)| 00:07:48 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | | | | | Q1,01 | P->S | QC (RAND) |
| 3 | NESTED LOOPS | | | | | | Q1,01 | PCWP | |
| 4 | NESTED LOOPS | | 11M| 2214M| 38976 (1)| 00:07:48 | Q1,01 | PCWP | |
| 5 | SORT UNIQUE | | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,01 | PCWP | |
| 6 | PX RECEIVE | | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,01 | PCWP | |
| 7 | PX SEND HASH | :TQ10000 | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,00 | P->P | HASH |
| 8 | PX BLOCK ITERATOR | | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,00 | PCWC | |
|* 9 | MAT_VIEW ACCESS FULL | CFC_MATERIALIZED | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,00 | PCWP | |
|* 10 | INDEX RANGE SCAN | CONTACT_CLIENT | 5500 | | 37 (0)| 00:00:01 | Q1,01 | PCWP | |
|* 11 | TABLE ACCESS BY INDEX ROWID| CONTACT | 5474 | 550K| 973 (0)| 00:00:12 | Q1,01 | PCWP | |
--------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
9 - filter("CFC"."SOURCEID"='e95027f0-a83e-11e3-a0ae-005056aebabc' AND "CFC"."ASSOCIATION_TYPE"='ContactDataSharing')
10 - access("C"."CLIENT"="CFC"."TARGETID")
11 - filter("C"."DELETED"=0)enter code here
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2164 | 196K| 36 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| CFC_MATERIALIZED_A_S_T | 2164 | 196K| 36 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("CFC"."ASSOCIATION_TYPE"='ContactDataSharing' AND
"CFC"."SOURCEID"='e95027f0-a83e-11e3-a0ae-005056aebabc')
-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2814 | 283K| 505 (0)| 00:00:07 |
| 1 | INLIST ITERATOR | | | | | |
|* 2 | TABLE ACCESS BY INDEX ROWID| CONTACT | 2814 | 283K| 505 (0)| 00:00:07 |
|* 3 | INDEX RANGE SCAN | CONTACT_CLIENT | 2827 | | 23 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("C"."DELETED"=0)
3 - access("C"."CLIENT"='e95027f0-a83e-11e3-a0ae-005056aebabc' OR
"C"."CLIENT"='eb37d3b0-a83e-11e3-a0ae-005056aebabc')
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 11M| 2214M| 305K (1)| 01:01:09 |
| 1 | NESTED LOOPS | | | | | |
| 2 | NESTED LOOPS | | 11M| 2214M| 305K (1)| 01:01:09 |
| 3 | SORT UNIQUE | | 2164 | 196K| 36 (0)| 00:00:01 |
|* 4 | INDEX RANGE SCAN | CFC_MATERIALIZED_A_S_T | 2164 | 196K| 36 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | CONTACT_CLIENT | 5500 | | 37 (0)| 00:00:01 |
|* 6 | TABLE ACCESS BY INDEX ROWID| CONTACT | 5474 | 550K| 973 (0)| 00:00:12 |
-------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("CFC"."ASSOCIATION_TYPE"='ContactDataSharing' AND
"CFC"."SOURCEID"='e95027f0-a83e-11e3-a0ae-005056aebabc')
5 - access("C"."CLIENT"="CFC"."TARGETID")
6 - filter("C"."DELETED"=0)
这里是第二个问题。我使用第一次查询的输出作为IN参数的输入:
SELECT *
FROM contact c
WHERE c.client in (
'e95027f0-a83e-11e3-a0ae-005056aebabc',
'eb37d3b0-a83e-11e3-a0ae-005056aebabc'
)
AND c.deleted = 0;
解释计划:
--------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 11M| 2214M| 38976 (1)| 00:07:48 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | | | | | Q1,01 | P->S | QC (RAND) |
| 3 | NESTED LOOPS | | | | | | Q1,01 | PCWP | |
| 4 | NESTED LOOPS | | 11M| 2214M| 38976 (1)| 00:07:48 | Q1,01 | PCWP | |
| 5 | SORT UNIQUE | | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,01 | PCWP | |
| 6 | PX RECEIVE | | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,01 | PCWP | |
| 7 | PX SEND HASH | :TQ10000 | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,00 | P->P | HASH |
| 8 | PX BLOCK ITERATOR | | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,00 | PCWC | |
|* 9 | MAT_VIEW ACCESS FULL | CFC_MATERIALIZED | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,00 | PCWP | |
|* 10 | INDEX RANGE SCAN | CONTACT_CLIENT | 5500 | | 37 (0)| 00:00:01 | Q1,01 | PCWP | |
|* 11 | TABLE ACCESS BY INDEX ROWID| CONTACT | 5474 | 550K| 973 (0)| 00:00:12 | Q1,01 | PCWP | |
--------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
9 - filter("CFC"."SOURCEID"='e95027f0-a83e-11e3-a0ae-005056aebabc' AND "CFC"."ASSOCIATION_TYPE"='ContactDataSharing')
10 - access("C"."CLIENT"="CFC"."TARGETID")
11 - filter("C"."DELETED"=0)enter code here
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2164 | 196K| 36 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| CFC_MATERIALIZED_A_S_T | 2164 | 196K| 36 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("CFC"."ASSOCIATION_TYPE"='ContactDataSharing' AND
"CFC"."SOURCEID"='e95027f0-a83e-11e3-a0ae-005056aebabc')
-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2814 | 283K| 505 (0)| 00:00:07 |
| 1 | INLIST ITERATOR | | | | | |
|* 2 | TABLE ACCESS BY INDEX ROWID| CONTACT | 2814 | 283K| 505 (0)| 00:00:07 |
|* 3 | INDEX RANGE SCAN | CONTACT_CLIENT | 2827 | | 23 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("C"."DELETED"=0)
3 - access("C"."CLIENT"='e95027f0-a83e-11e3-a0ae-005056aebabc' OR
"C"."CLIENT"='eb37d3b0-a83e-11e3-a0ae-005056aebabc')
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 11M| 2214M| 305K (1)| 01:01:09 |
| 1 | NESTED LOOPS | | | | | |
| 2 | NESTED LOOPS | | 11M| 2214M| 305K (1)| 01:01:09 |
| 3 | SORT UNIQUE | | 2164 | 196K| 36 (0)| 00:00:01 |
|* 4 | INDEX RANGE SCAN | CFC_MATERIALIZED_A_S_T | 2164 | 196K| 36 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | CONTACT_CLIENT | 5500 | | 37 (0)| 00:00:01 |
|* 6 | TABLE ACCESS BY INDEX ROWID| CONTACT | 5474 | 550K| 973 (0)| 00:00:12 |
-------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("CFC"."ASSOCIATION_TYPE"='ContactDataSharing' AND
"CFC"."SOURCEID"='e95027f0-a83e-11e3-a0ae-005056aebabc')
5 - access("C"."CLIENT"="CFC"."TARGETID")
6 - filter("C"."DELETED"=0)
问题
所以我的问题是,为什么CBO不以类似于在两个查询中手动执行查询的方式执行查询?我还尝试了带有提示的查询,以使用与两个查询相同的索引:
SELECT /*+ index(c CONTACT_CLIENT) */ c.*
FROM contact c
WHERE c.client in (
SELECT /*+ index(cfc CFC_MATERIALIZED_A_S_T) */ cfc.targetid
FROM cfc_materialized cfc
WHERE cfc.sourceid = 'e95027f0-a83e-11e3-a0ae-005056aebabc'
AND cfc.association_type = 'ContactDataSharing'
)
AND c.deleted = 0;
但我得到了一个更糟糕的解释计划:
--------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 11M| 2214M| 38976 (1)| 00:07:48 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | | | | | Q1,01 | P->S | QC (RAND) |
| 3 | NESTED LOOPS | | | | | | Q1,01 | PCWP | |
| 4 | NESTED LOOPS | | 11M| 2214M| 38976 (1)| 00:07:48 | Q1,01 | PCWP | |
| 5 | SORT UNIQUE | | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,01 | PCWP | |
| 6 | PX RECEIVE | | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,01 | PCWP | |
| 7 | PX SEND HASH | :TQ10000 | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,00 | P->P | HASH |
| 8 | PX BLOCK ITERATOR | | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,00 | PCWC | |
|* 9 | MAT_VIEW ACCESS FULL | CFC_MATERIALIZED | 2164 | 196K| 10672 (1)| 00:02:09 | Q1,00 | PCWP | |
|* 10 | INDEX RANGE SCAN | CONTACT_CLIENT | 5500 | | 37 (0)| 00:00:01 | Q1,01 | PCWP | |
|* 11 | TABLE ACCESS BY INDEX ROWID| CONTACT | 5474 | 550K| 973 (0)| 00:00:12 | Q1,01 | PCWP | |
--------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
9 - filter("CFC"."SOURCEID"='e95027f0-a83e-11e3-a0ae-005056aebabc' AND "CFC"."ASSOCIATION_TYPE"='ContactDataSharing')
10 - access("C"."CLIENT"="CFC"."TARGETID")
11 - filter("C"."DELETED"=0)enter code here
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2164 | 196K| 36 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| CFC_MATERIALIZED_A_S_T | 2164 | 196K| 36 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("CFC"."ASSOCIATION_TYPE"='ContactDataSharing' AND
"CFC"."SOURCEID"='e95027f0-a83e-11e3-a0ae-005056aebabc')
-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2814 | 283K| 505 (0)| 00:00:07 |
| 1 | INLIST ITERATOR | | | | | |
|* 2 | TABLE ACCESS BY INDEX ROWID| CONTACT | 2814 | 283K| 505 (0)| 00:00:07 |
|* 3 | INDEX RANGE SCAN | CONTACT_CLIENT | 2827 | | 23 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("C"."DELETED"=0)
3 - access("C"."CLIENT"='e95027f0-a83e-11e3-a0ae-005056aebabc' OR
"C"."CLIENT"='eb37d3b0-a83e-11e3-a0ae-005056aebabc')
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 11M| 2214M| 305K (1)| 01:01:09 |
| 1 | NESTED LOOPS | | | | | |
| 2 | NESTED LOOPS | | 11M| 2214M| 305K (1)| 01:01:09 |
| 3 | SORT UNIQUE | | 2164 | 196K| 36 (0)| 00:00:01 |
|* 4 | INDEX RANGE SCAN | CFC_MATERIALIZED_A_S_T | 2164 | 196K| 36 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | CONTACT_CLIENT | 5500 | | 37 (0)| 00:00:01 |
|* 6 | TABLE ACCESS BY INDEX ROWID| CONTACT | 5474 | 550K| 973 (0)| 00:00:12 |
-------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("CFC"."ASSOCIATION_TYPE"='ContactDataSharing' AND
"CFC"."SOURCEID"='e95027f0-a83e-11e3-a0ae-005056aebabc')
5 - access("C"."CLIENT"="CFC"."TARGETID")
6 - filter("C"."DELETED"=0)
我还尝试使用join而不是IN子句,如Alexander和StanislavL所建议的:
SELECT c.*
FROM contact c
JOIN cfc_materialized cfc ON c.client = cfc.targetid
WHERE cfc.sourceid = 'e95027f0-a83e-11e3-a0ae-005056aebabc'
AND cfc.association_type = 'ContactDataSharing'
AND c.deleted = 0;
得到了下面的解释计划,它同样非常慢(比两个单独的查询慢):
在中使用join而不是
,以避免对中的每一行计算相同的查询,其中
主要是避免对联系人
表进行完全表访问。
避免c.*
,指定具体的列列表。
重建索引
在CFC\u物化(TARGETID、关联类型、源ID)上创建索引CFC\u物化\u S\T代码>
控制连接顺序访问
让我知道。为什么您认为查询会被计算不止一次?而且,我相信,cfc\u上的索引会具体化。这里需要targetid