【发布时间】:2014-10-05 08:12:22
【问题描述】:
您能帮我在 oracle 数据库中哪个查询性能更好,哪个更推荐?
第一次查询:
Select t2_c1,t1_c3,t1_c4,t3_c1
from t1,t2,t3
where t1_c1 = t2_c1 and t1_c2=t3_c2
计划:
ID PID Operation Name Rows Bytes Cost CPU Cost IO Cost Temp space IN-OUT PQ Dist PStart PStop
0 SELECT STATEMENT 22362 829K 82 82
1 0 HASH JOIN 22362 829K 82 82
2 1 TABLE ACCESS FULL CUSTOMER 87 2349 2 2
3 1 TABLE ACCESS FULL MASTER 22362 240K 79 79
第二次查询:
select (select t2_c2 from t2 where t1_c1 = t2_c1), t1_c3, t1_c4, t3_c1
from t1, t3
where t1_c2=t3_c2
计划:
ID PID Operation Name Rows Bytes Cost CPU Cost IO Cost Temp space IN-OUT PQ Dist PStart PStop
0 SELECT STATEMENT 22362 240K 79 79
1 0 TABLE ACCESS BY INDEX ROWID CUSTOMER 1 27 2 2
2 1 INDEX RANGE SCAN SYS.IDX_CUSTOMER_V_CUST 1 1 1
3 0 TABLE ACCESS FULL MASTER 22362 240K 79 79
【问题讨论】:
-
我的问题是 ORA-02402: PLAN_TABLE not found :D
-
加入会更好,而不是拨打
SELECT。所以 First Query 应该是好的。 -
我整理了Plan Table,结果显示第二个查询表现更好。我也有 t1_c2、t2_c2 和 t3_c2 的索引。
-
@MaheswaranRavisankar 实际上应该没有区别,因为 oracle 优化器会在选择最佳执行计划之前重写查询
-
@rima 第二个查询执行得更好是有道理的,因为解释计划显示第一个查询需要 2 次全表扫描,而第二个查询使用范围扫描和按索引访问表。
标签: sql performance oracle plsql