Oracle SQL性能优化调整

  1. 选用适合的Oracle优化器
    Oracle的优化器有三种:
  2. RULE(基于规则)
  3. COST(基于成本)
  4. CHOOSE(选择性)

可以在init.ora文件中通过OPTIMIZER_MODE参数设置缺省的优化器类型,如RULECOSTCHOOSEALL_ROWSFIRST_ROWS。也可以在SQL语句级别或会话级别进行覆盖。若使用基于成本的优化器(CBO, Cost-Based Optimizer),需经常运行analyze命令,以增加数据库对象统计信息的准确性。当数据库的优化器模式为CHOOSE时,实际优化器模式将与analyze命令的执行情况有关。若表已被分析,则优化器模式自动变为CBO,否则使用RULE。

  1. 访问表的方式
    Oracle使用两种访问表中记录的方式:
  2. 全表扫描:依次访问表中每条记录,Oracle会一次读取多个数据块优化扫描过程。
  3. 基于ROWID的访问:ROWID包含记录的物理位置信息,可提高表访问效率。Oracle通过索引建立数据与ROWID的联系,基于索引列的查询可显著提高性能。

  4. 共享SQL语句

    Oracle通过共享池(shared buffer pool)在SGA(系统全局区域)中存储解析过的SQL语句,以避免重复解析。如果执行的SQL语句与之前完全相同,Oracle可直接使用已解析的语句,提升性能。