读书人

SQL 执行计划,该怎么解决

发布时间: 2012-05-23 13:44:13 作者: rapoo

SQL 执行计划
SELECT a.customer_id,c.party_code
FROM tp_no_apply_order a, TH_PARTY C
WHERE a.customer_id = c.party_code
执行计划

SELECT STATEMENT, GOAL = CHOOSE14519397775880
NESTED LOOPS14519397775880
INDEX FAST FULL SCANJTCRMTP_CUSTOMER_CODE619397387940
INDEX UNIQUE SCANJTCRMTH_PARTY_U011120
--多加了一个字段,a.req_seri_no
SELECT a.customer_id,a.req_seri_no,c.party_code
FROM tp_no_apply_order a,TH_PARTY C
WHERE a.customer_id = c.party_code
执行计划
SELECT STATEMENT, GOAL = CHOOSE214193971028041
HASH JOIN214193971028041
TABLE ACCESS FULLJTCRMTP_NO_APPLY_ORDER2419397640101
INDEX FAST FULL SCANJTCRMTH_PARTY_U01701244432488860
两段执行计划不一样了,后者,TABLE ACCESS FULL 全表扫。


[解决办法]
同等回复。
[解决办法]
因为索引TP_CUSTOMER_CODE 中没有a.req_seri_no字段,用索引还得再用ROWID查询表数据才能获取到字段a.req_seri_no,效率比全表扫描还差。
如果两个表中有一个比较小,可以做为驱动表进行嵌套循环。
[解决办法]

探讨

因为索引TP_CUSTOMER_CODE 中没有a.req_seri_no字段,用索引还得再用ROWID查询表数据才能获取到字段a.req_seri_no,效率比全表扫描还差。
如果两个表中有一个比较小,可以做为驱动表进行嵌套循环。

读书人网 >oracle

热点推荐