Oracle 基础 —SQL语句优化的途径

一:SQL语句的优化途径

  1.选择合适的Oracle优化器

    (1).RBO 基于规则进行优化的优化器   --Oracle 10G 后被抛掉

    (2).CBO基于成本(CPU 和 内存的占用率)优化的优化器  --优化器使用的模式根据目标而定

      CBO 的优化模式:

        Rule:基于规则

        Choose:默认,表或者索引有统计信息,走CBO模式,否则走RBO 模式

        First row:表中有统计信息时,以最快方式返回查询的前几行,总体减少响应时间

        All row:表中有统计信息时,以最快方式返回表的所有行,总体提高查询吞吐量

  2.选择恰当的扫描方式

        全表扫描:Oracle读取表中的所有行,并检查每一行是否满足WHERE 语句的限制

        使用ROWID:快速定位到目标数据上

        索引扫描:只在CBO模式下有效

        快速索引扫描:扫描的数据不排序

  3.善于利用共享的SQL语句  --共享的SQL 语句放在Oracle实例的系统全局区域(SGA)中,

时间: 2024-10-14 22:45:10

Oracle 基础 —SQL语句优化的途径的相关文章

Oracle之sql语句优化

项目中虽然使用了orm映射,但Oracle系统的优化还是很有价值的,这里从sql语句的角度对常用的语句做下总结. 1.from字段中的优化: Oracle安照从右到左的顺序加载表数据,应该把可以排除数据最多的表放到后面(基础表). 比如,在关联查询中,把课程表放到后面,成绩表放到前面,因为课程表数据一般比较少,关联的时候可以快速的过滤掉一些成绩数据. 2.where中的优化: 对可以过滤数据最多的,放到后面,原理也是Oracle执行从下到上(从右到左)的顺序. 3.使用列名替代*: 省去从字典表

ORACLE 中 SQL语句优化

(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):  ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.    (2) WHERE子句中的连接顺序.:  ORACLE采用自下而上的顺序解

oracle常见sql语句优化

1.* 号引起的执行效率 尽量减少使用select * 来进行查询,当你查询使用*, 数据库会进行解析并将*转换为全部列. select count(si.student_id) from Student_info si(student_id为索引) 与 select count(*) from Student_info si 执行时.上面的语句明显会比下面没有用索引统计的语句要快 2.避免在索引列上使用计算. WHERE 子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描. 举

Oracle SQL语句优化34条

非常好用的SQL语句优化34条 1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基 础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. (2) WHERE子句中的连接顺序.: ORACL

Oracle Sql语句优化

1.最高效的删除重复记录方法 (因为使用了ROWID)   例子:  DELETE FROM  EMP E  WHERE  E.ROWID > (SELECT MIN(X.ROWID) FROM  EMP X  WHERE  X.EMP_NO = E.EMP_NO); 2.在含有子查询的 SQL 语句中 , 要特别注意减少对表的查询   例子:  SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = (SELECT TAB_NAME,DB_V

Oracle大数据SQL语句优化

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描, 如: select id from t where num is null    可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则

Oracle 动态SQL语句

Oracle 动态SQL语句 (2012-06-18 16:36:12) 转载▼ 标签: oracle it   EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQLpackage包. 它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTEIMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTEIMMEDIATE,因为它获的收益在包

SQL系列 - SQL语句优化个人总结

关于SQL语句优化方法 有些是通用的(如避免Select *): 有些不同的数据库管理系统有所区别(如Where子句顺序): 然后必须根据实际环境进行调优,因为即使是相同的数据库和表,在数据量或其他环境变化之后,SQL效率可能是不同的.所以,优化不是一蹴而就的. 一些总结 下面是我在工作中,主要是Oracle环境下一些常用的SQL语句优化方法,仅供参考.当然,后续可以再深入研究下SQL执行计划.索引等. 指明需要的列 Selcet中每少提取一个字段,数据的提取速度就会有相应的提升.提升的速度还要

Orcle的sql语句优化(1)

1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖. 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行an