Sql 检查两个查询的性能

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

您是否介意帮助我在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   
计划:

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第二个查询执行得更好这一事实很有意义,因为解释计划显示第一个查询需要两次完整的表扫描,而第二种方法使用范围扫描和索引表访问。