基于CBO的SQL优化

基于CBO的SQL优化 应用程序的优化分为很多方面,如硬件,数据库配置,网络宽带等等。这里我们只讨论,如何基于ORACLE 10G数据库(使用CBO优化器),写出最有效率的SQL语句。
CBO介绍:
基于成本的优化器(Cost-Based Optimization)
★计算各种可能的“执行计划”的Cost,从中选择Cost最低的执行方案,作为实际运行方案。
CBO限制:当检索的表达到一定数量之后,就不会有以上特点。
【基于CBO的SQL优化】RBO介绍:
基于规则的优化器(Rule-Based Optimization)
★只认规则,对数据不敏感,在Oracle 10g中已被完全取代。
SQL语句优化有以下几个要点:

1.减少对表的检索 2.使用索引 3.减少解析

常用工具:
1.Explain Plan 2.SQL Trace 3.tkprof

1.减少对表的检索
  • 子查询
  • 去除不必要的条件和数据源
  • EXISTS 和 IN,谁更合适?
  • 避免使用函数处理索引列
  • 避免对索引列计算
  • 使用基于函数的索引
  • 使用HINT
2.使用索引
  • 索引也是需要开销的,所以并不一定要使用索引。
  • 对于数据量较大的表,尽量 使用索引。
  • 程序在UT阶段由于没有实际环境,所以不要使用HINT。
3.减少解析
  • 共享池(Shared Pool)
    对于已经运用过的SQL语句,Oracle数据库会将信息存到共享池中,再执行相同的SQL语句时就可以不用再解析了。
    原则上,Oracle数据库不会去利用不一样的SQL,哪怕仅仅是多出一个空格,或者大小写的区别。所以为了提高SQL的再利用率,要彻底的遵守编码规范。
  • 使用动态SQL

    推荐阅读