【Oracle】Oracle优化53个规则详解
- 1、选用适合的 ORACLE 优化器
- 2、访问 Table 的方式
- 3、共享 SQL 语句
- 4、选择最有效率的表名顺序(只在基于规则的优化器中有效)
- 5、WHERE 子句中的连接顺序
- 6、SELECT 子句中避免使用 ‘ * ’
- 7、减少访问数据库的次数
- 8、使用 DECODE 函数来减少处理时间
- 9、整合简单,无关联的数据库访问
- 10、删除重复记录
- 11、用 TRUNCATE 替代 DELETE
- 12、尽量多使用 COMMIT
- 13、计算记录条数
- 14、用 Where 子句替换 HAVING 子句
- 15、减少对表的查询
- 16、通过内部函数提高 SQL 效率
- 17、使用表的别名(Alias)
- 18、用 EXISTS 替代 IN
- 19、用 NOT EXISTS 替代 NOT IN
- 20、用表连接替换 EXISTS
- 21、用 EXISTS 替换 DISTINCT
- 22、识别‘低效执行’的 SQL 语句
- 23、使用 TKPROF 工具来查询 SQL 性能状态
- 24、用 EXPLAIN PLAN 分析 SQL 语句
- 25、用索引提高效率
- 26、索引的操作
- 27、基础表的选择
- 28、多个平等的索引
- 29、等式比较和范围比较
- 30、不明确的索引等级
- 31、强制索引失效
- 32、避免在索引列上使用计算
- 33、自动选择索引
- 34、避免在索引列上使用 NOT
- 35、用“>=”替代“>”
- 36、用 UNION 替换 OR(适用于索引列)
- 37、用 IN 来替换 OR
- 38、避免在索引列上使用 IS NULL 和 IS NOT NULL
- 39、总是使用索引的第一个列
- 40、ORACLE 内部操作
- 41、用 UNION-ALL 替换 UNION(如果有可能的话)
- 42、使用提示(Hints)
- 43、用 WHERE 替代 ORDER BY
- 44、避免改变索引列的类型
- 45、需要当心的 WHERE 子句
- 46、连接多个扫描
- 47、CBO 下使用更具选择性的索引
- 48、避免使用耗费资源的操作
- 49、优化 GROUP BY
- 50、使用日期当心
- 51、使用显式的游标(CURSORs)
- 52、优化 EXPORT 和 IMPORT
- 53、分离表和索引
1、选用适合的 ORACLE 优化器
-
ORACLE 的优化器共有 3 种:
-
- RULE(基于规则)
-
- COST(基于成本)
-
- CHOOSE(选择性)
-
-
设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如 RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS。你当然也可以在 SQL 句级或是会话(session)级对其进行覆盖。
-
为了使用基于成本的优化器(CBO,Cost-Based Optimizer),你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。
-
如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过 analyze 命令有关。如果 table 已经被 analyze 过,优化器模式将自动成为 CBO,反之,数据库将采用 RULE 形式的优化器。
-
在缺省情况下,ORACLE