Oracle SQL性能优化调整
- 选用适合的Oracle优化器
Oracle的优化器有三种: - RULE(基于规则)
- COST(基于成本)
- CHOOSE(选择性)
可以在init.ora
文件中通过OPTIMIZER_MODE
参数设置缺省的优化器类型,如RULE
、COST
、CHOOSE
、ALL_ROWS
、FIRST_ROWS
。也可以在SQL语句级别或会话级别进行覆盖。若使用基于成本的优化器(CBO, Cost-Based Optimizer),需经常运行analyze
命令,以增加数据库对象统计信息的准确性。当数据库的优化器模式为CHOOSE
时,实际优化器模式将与analyze
命令的执行情况有关。若表已被分析,则优化器模式自动变为CBO,否则使用RULE。
- 访问表的方式
Oracle使用两种访问表中记录的方式: - 全表扫描:依次访问表中每条记录,Oracle会一次读取多个数据块优化扫描过程。
-
基于ROWID的访问:ROWID包含记录的物理位置信息,可提高表访问效率。Oracle通过索引建立数据与ROWID的联系,基于索引列的查询可显著提高性能。
-
共享SQL语句
Oracle通过共享池(shared buffer pool)在SGA(系统全局区域)中存储解析过的SQL语句,以避免重复解析。如果执行的SQL语句与之前完全相同,Oracle可直接使用已解析的语句,提升性能。