【问题标题】:check about performance of two queries检查两个查询的性能
【发布时间】: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


【解决方案1】:

如果您希望返回 MASTER 表上少于 4% 的行,我建议您使用第二个,但如果您要返回 MASTER 上的所有行,第一个计划要好得多。

任何问题都可以告诉我。

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多