暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle SQL语句之常见优化方法 <六>

Oracle优化大师 2018-05-14
666


14、>=是直接定位:

    在Oracle 解析器中,如果使用 >还需要一个判断的过程。

15、使用索引:

    使用于查询的表,提供了主键的唯一性验证,long或者long raw数据类型,几乎可以索引所有列定期重建索引,在删除和修改多的表,不适用索引,原因,不解释了。

       注意,并不是创建了索引后就一定会走索引,使用索引的时候,不能使用索引进行一些计算,否则失效。

       使用索引快于全表扫描,在多表连接使用索引提高效率。

避免在索引上使用not:会停止索引(not表示的是:没有什么, 而索引表示的是:有什么)

        用exitsts替代distinct:

        在提交一个包含一对多表信息(部门和雇员表)的查询时使用。原因:查找即返回原理

       避免在索引列上使用计算:

低效:


SELECT *

  FROM dept 

WHERE sal * 12 > 25000


高效:


SELECT *

  FROM dept

 WHERE sal > 25000 12



       避免在索引列上使用is null 和 is not null:

因为索引不会对null数据类型进行索引,索引只是记录有什么

       对于单列索引,不会进行索引

对于符合索引,如果所有列多为空,不进行索引,只要有一个列不空,就索引。

       在Oracle中空不等于空,所以,就会插入若干条相同键值的记录,而他们的值都是空,而空值不进行索引,所以,当进行空值比较时,会使用Oracle,停止使用该索引。

低效:

Select …. 

  From dep 

 where  dep_code is not null;

高效:

Select …. 

  From dep 

 where dep_code >=0;

这里也会过滤掉null列

总是使用索引的第一个列:

如果索引建立在多个列上,只有咋他的第一个列,被where自居引用时,优化器才会选择使用该索引,当仅使用索引的第二个列是,优化器会忽略索引,使用全表索引。


16、使用union替代where字句中的or:

      对索引列使用or会导致全表扫描,针对多个索引列有效

17、在oracle8i之前,两者执行路径似乎相同,

   但能用in的就别用or。

18、使用union-all:

     union-all:不排序,查询所有的,不过滤重复的

     union:排序(优化sort_raea_size这块内存),过滤重复的。

19、order by 用where 限定:

       order by名中索引的条件比较苛刻

 排序列必须包含在相同的索引中,并保持索引中的排列顺序,Order by中  所有列不能定义为空。

20、需要当心的where子句:

      !=将不使用索引

      ||字符连接函数,会停用索引

      + - *    会停用索引

相同的索引列不能互相比较,否则会启用全表扫描

21、使用大写:

      Oracle中会把所有的语句转换成大写,

      有些内部表,如,查询表名时,判断某个表是否存在,如果是大写有效,小写就是无效的

22、根据磁盘读写速率调整块的大小:

      一个Oracle数据库中,表空间、段、区、数据块的概念,可以根据服务器的I/O性能调整块的大小。



下期更精彩


                                  





本文分享自微信公众号 - Oracle优化大师,如有侵权,请联系 service001@enmotech.com 删除。
最后修改时间:2019-12-20 10:51:40
文章转载自Oracle优化大师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论