规则1: 使用数据量小的表作为基础表,如果是多表查询,使用中间表作为基础表,基础表要放在from的最后。
规则2: 在where子句中,表关联放在最前面,能够过滤掉最多数据的放在最后面。
规则3: 尽量少的实用 * (避免查询数据字典)。
规则4: 减少数据库的访问次数 (访问数据库时会有很多操作,解析SQL,计算索引效率,读取数据等)。
规则5: 使用decode可以避免重复扫描相同数据和重复连接相同表。
规则6: 用Where子句替换HAVING子句:
避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销. (非oracle中)on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后,因为on是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的,where也应该比having快点的,因为它过滤数据后才进行sum,在两个表联接时才用on的,所以在一个表的时候,就剩下where跟having比较了。在这单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,那它们的结果是一样的,只是where可以使用rushmore技术,而having就不能,在速度上后者要慢如果要涉及到计算的字段,就表示在没计算之前,这个字段的值是不确定的,根据上篇写的工作流程,where的作用时间是在计算之前就完成的,而having就是在计算后才起作用的,所以在这种情况下,两者的结果会不同。在多表联接查询时,on比where更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里
规则7: 多使用内部函数代替复杂的执行SQL。
规则8: 索引是表的一个概念部分,用来提高检索数据的效率,ORACLE使用了一个复杂的自平衡B-tree结构. 通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引. 同样在联结多个表时使用索引也可以提高效率. 另一个使用索引的好处是,它提供了主键(primary key)的唯一性验证.。那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 通常, 在大型表中使用索引特别有效. 当然,你也会发现, 在扫描小表时,使用索引同样能提高效率. 虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价. 索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本身也会被修改. 这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O ,由此机制,在经常进行数据的增删操作的表进行索引要适当。定期的重构索引是有必要的.:
ALTER INDEX <INDEXNAME> REBUILD <TABLESPACENAME>
索引好处:
A)索引可以避免全表扫描。多数查询可以仅扫描少量索引页及数据页,而不是遍历所有数据页。
B)对于非聚集索引,有些查询甚至可以不访问数据页。
C)聚集索引可以避免数据插入操作集中于表的最后一个数据页。
D)一些情况下,索引还可用于避免排序操作。
索引弊端:
虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引。
规则9: 使用exists 代替 distinct。
规则10: 执行SQL尽量用大写(减少一步操作)。
规则11: 尽量减少在索引列上实用 not
规则12: 减少在索引列上的计算。
规则13: 在索引列上时 使用UNION 代替 OR
例子:
高效:
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE LOC_ID = 10
UNION
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE REGION = “MELBOURNE”
低效:
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE LOC_ID = 10 OR REGION = “MELBOURNE”
规则14:
避免在索引列上使用判断空(is null / is not null),可以使用 >0 这类。
规则15:
避免修改索引列的类型。
分享到:
相关推荐
在Oracle SQL优化方面,有多种策略和原则可以提升查询效率,降低资源消耗,以下是一些核心的Oracle优化原则和方法: 1. **索引优化**:索引是提升查询速度的关键。合理创建和使用索引能显著提高数据检索的速度。B树...
以下是对标题"oracle优化原则"及描述中提到的知识点的详细说明: 1. **选用适合的ORACLE优化器** Oracle的优化器主要有三种类型:基于规则(RULE)、基于成本(COST)和选择性(CHOOSE)。基于成本的优化器(CBO)...
以下是一些关键的Oracle优化规则: 1. **选用适合的优化器**:Oracle提供了三种优化器:RULE(基于规则)、COST(基于成本)和CHOOSE(选择性)。COST优化器是最常用的一种,它基于对象的统计信息来决定最佳执行...
### Oracle优化规则详解 #### 一、Oracle优化模式选择规则 在进行Oracle数据库查询时,系统采用不同的优化模式来决定如何执行SQL语句。优化器根据这些模式来选择最佳的执行路径,从而达到提高查询效率的目的。...
12. **维护统计信息**:定期执行DBMS_STATS包来更新表和索引的统计信息,确保Oracle优化器能做出正确的执行计划决策。 13. **使用绑定变量适配器**:对于特定的查询模式,绑定变量适配器可以帮助优化器选择更合适的...
#### 一、选用适合的Oracle优化器 在Oracle数据库中,优化器的选择对于SQL语句的执行效率至关重要。Oracle提供了三种优化器模式: 1. **基于规则的优化器(RULE)**:这是一种较老的优化器类型,它根据一系列固定...
Oracle 优化器可以分为两大类:基于规则的优化器(RBO)和基于成本的优化器(CBO)。 基于规则的优化器(RBO) RBO 是一种 Based on Rule 的优化器,根据可用的访问路径和访问路径的等级来选择执行计划。RBO 访问...
"基于成本的Oracle优化法则"是一个重要的概念,它涉及到Oracle数据库查询优化器的工作原理。在这个主题中,我们将深入探讨这一法则,理解其背后的机制,并学习如何利用这些知识来提升数据库性能。 1. **基于成本的...
而 RBO 是基于规则的优化器,根据 Oracle 设定的规则生成执行计划。 Oracle 10g 的 CBO 已经很成熟,推荐使用。 查看优化器模式 可以使用 `show parameter optimizer_mode` 查看当前的优化器模式。optimizer_mode ...
Oracle优化设计方案旨在提升数据库性能,确保数据安全,便于管理和开发。设计Oracle数据库时,需要遵循一系列基本原则和步骤。 首先,逻辑建模是根据系统需求分析数据间的内在和外在关系,构建整个系统的数据结构。...
这篇文档“Oracle语句优化规则汇总.pdf”很可能提供了关于如何提高Oracle数据库查询效率、减少资源消耗的关键信息。以下是一些可能涵盖在文档中的关键知识点: 1. **索引优化**: - 使用合适的索引类型,如B树索引...
优化笔记 sql性能的调整-总结 SQL代码性能优化 Oracle语句优化53个规则详解 ORACLE9i优化设计与系统调整 oracle9i优化器介绍 oracle9i的查询优化 ……
Oracle 19C SQL调优是数据库管理员(DBA)日常工作中不可或缺的一部分,它涉及到优化SQL查询性能,提高数据库系统的整体效率。本指南针对Oracle 19C版本,提供了丰富的调优策略和技术,旨在帮助DBA们更好地管理和维护...
### Oracle优化教程知识点详解 #### 一、选用适合的Oracle优化器 在Oracle数据库中,优化器的选择对于SQL语句的执行效率至关重要。Oracle提供了三种优化器类型:基于规则(RULE)、基于成本(COST)和选择性...
### Oracle语句优化规则详解 #### 一、选用适合的Oracle优化器 Oracle数据库提供了三种主要的优化器:基于规则的优化器(RULE)、基于成本的优化器(COST)和选择性优化器(CHOOSE)。优化器的选择直接影响到SQL...
在Oracle数据库管理中,"基于成本的Oracle优化"是一个关键概念,它涉及到如何最有效地执行SQL查询,以提高系统性能并降低资源消耗。Oracle优化器是数据库内部的一个组件,其主要任务是分析SQL语句,并根据当前的系统...
### Oracle优化方法与实践 #### 一、优化器模式选择 在进行Oracle数据库优化时,首先需要关注的是优化器模式的选择。Oracle提供了多种优化器模式,包括基于规则的优化器(RULE)、基于成本的优化器(COST)以及...
例如,在基于规则的优化器中,应将记录条数少的表作为驱动表放置在FROM子句末尾;WHERE子句的条件应从能过滤大量数据的开始,以减少处理数据量;SELECT语句中避免使用*,而是直接列出所需列名,以减少数据字典查询的...
以下是一些关键的Oracle SQL优化规则: 1. **选择合适的索引**:索引可以加速数据检索,但创建和维护索引也会消耗资源。为经常出现在WHERE子句中的列创建索引,特别是主键和外键。避免在高基数(unique或接近unique...