Oracle中的优化问题

1. 在查询时, 尽量使用列名;

2. 在子查询和多表查询都可以达到目的时, 尽量使用多表查询;

3. 在集合运算中, 如果集合中含有null, 那么不能用not in, 但可以用in(可以理解为null包含了所有);

4.SQL语句的解析原则: 从右往左解析(SQL的执行计划);

5. 在使用having和where进行条件过滤时, 尽量使用where

6. 在union和union all都可以使用时, 应该使用union all;

7. 尽量不要使用集合运算.

时间: 2024-10-06 04:59:34

Oracle中的优化问题的相关文章

oracle中sql优化读书笔记1-优化器

我们写一条sql语句给Oracle,Oracle是需要将他解析之后才去执行的,也就是要明确先干啥后干啥.这就是所谓的执行计划. 优化器就是用来得出最后的执行计划的工具,Oracle的优化器有两种一种是基于规则的,一种是基于成本的. 1.基于规则的,就是明确了步骤,比如说必须是先把where 条件中最后一个条件用于过滤,再在此基础上用倒数第二个条件过滤. 2.基于成本的,就是先收集一下当前的数据量有多大,各种条件的数据量有多大(这就得有Oracle的统计的东西做支持了),通过判断找出来过滤出最少的

对oracle中SQL优化的理解

Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间.要达到上述目的,我们通常只有如下三种方法可以选择:1.降低目标SQL语句的资源消耗.2.并行执行目标SQL语句.3.平衡系统的资源消耗.方法1:a.在不更改业务逻辑的情况下改写SQL来降低目标SQL语句的资源消耗. b.不改写SQL但通过调整执行计划或相关表的数据来降低目标SQL语句的资源消耗.注意:走索引不一定比全表扫描好,例如在很多情况下走索引的嵌套循环连接的执行效率往往比不上走全表扫描的哈希连接的执行效率.方法2:

转://看懂Oracle中的执行计划

一.什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二.怎样查看Oracle执行计划? 2.1 explain plan for命令查看执行计划 在sql*plus中,执行如下命令: 1)explain plan for select * from XXXX; 2)select * from table(dbms_xplan.display); 2.2 SET AUTOTRACE ON查看执行计划 语法:SET AUTOT[RACE] {OFF |

Oracle数据库中的优化方案

来自: http://woainichenxueming.iteye.com/blog/726541 一. 优化oracle中的sql语句,提高运行效率 1. 选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名, FROM子句中写在最后的表(基础表 driving table)将被最先处理, 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表. 如: 表T_USER有16384条记录, 表T_DEPARTME

ORACLE 中 SQL语句优化

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

索引优化原则及Oracle中索引总结

索引建立原则 确定针对该表的操作是大量的查询操作还是大量的增删改操作. 尝试建立索引来帮助特定的查询.检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引. where语句中不得不对查询列采用函数查询,如upper函数,最好建立相应函数索引: 在SQL语句中经常进行GROUP BY.ORDER BY的字段上建立索引 用于联接的列(主健/外健)上建立索引: 在经常存取的多个列上建立复合索引,但要注意复合索引的建立顺序要按照使用的频度来确定: 尝试建立复合索引来进一步提高系统性能.修

oracle中数据的分页显示及优化

在一个页面中经常会出现分页的现象,那么后台数据库又应该如何分页显示呢? 分页可以使用oracle中的rownum函数. 一个页面中从第几行到第几行数据的显示. 下面以scott用户下的emp表说明: 语句一: select b.* from( select a.* ,rownum row_num from (select * from emp ) a) bwhere row_num between 3 and 5; 语句二: select b.* from( select a.* ,rownum

Oracle SQL性能优化

转载自:http://www.cnblogs.com/rootq/archive/2008/11/17/1334727.html (1)      选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection ta

Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结

Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格式如下:function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr :需要进行正则处理的字符串__pattern :进行匹配的正则表达式,匹配的值将返回,返回策略由__occurrence决定__po