Sql 检查两个查询的性能
您是否介意帮助我在oracle数据库中哪个查询执行得更好,哪个更推荐 第一次查询:Sql 检查两个查询的性能,sql,performance,oracle,plsql,Sql,Performance,Oracle,Plsql,您是否介意帮助我在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 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
计划:
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
第二次查询:
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
计划:
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
如果您希望返回的行数少于表母版上的行数的4%,我建议您使用第二个,但如果您将返回表母版上的所有行,则第一个计划要好得多 有什么问题就告诉我
谢谢。我的问题是ORA-02402:找不到计划表:DJoin会更好,而不是在
选择中打电话。所以第一次查询应该是好的。我整理了计划表,结果表明第二次查询的性能更好。我还有t1_c2、t2_c2和t3_c2的索引。@MaheswaranRavisankar实际上,它们必须没有区别,因为oracle optimizer会在选择最佳执行之前重写查询plan@rima第二个查询执行得更好这一事实很有意义,因为解释计划显示第一个查询需要两次完整的表扫描,而第二种方法使用范围扫描和索引表访问。