• Oracle数据库SQL优化


    SQL优化的最终目的是用户体验-在最短时间内让用户在页面数据。因此,执行时间是SQL优化的重要指标。在SQL查询中,I/O操作最占系统性能的。I/O操作量越大,时间越久。减少I/O操作量是优化SQL的目标。同时,CPU,缓存命中率也很重要。

    并不是所有SQL都需要被优化,使用频率高,性能差的SQL语句需要重点被优化。可以通过查看v$sqlarea表,访问OEM来查找。

    注意不同版本的Oracle使用不同的优化器。11g的优化器基于代价(Cost Based Optimizer)(考虑SQL执行耗费的资源代价)11g之前是基于规则来优化的(Rule Based Optimizer)。优化要针对优化器来完成。

    1.合理使用索引

    原理:ORACLE是按行存储数据的(ROWID是行的位置) 而查询条件是列的,数据结构不同,查找速度慢。 建立按列存储的索引可以按列查找,数据在一个区域内,速度快。(弊端:事务处理起来不方便,增加了Insert, Update的执行时间)

    原则:

    适合使用索引的列:

    1.经常被查询的列

    2.经常排序分组的列

    3.经常连接的列

    不适合使用索引的列

    1.数据经常更改的列

    2.数据量小、重复性高的列

    注意:

    1.给索引指定单独的表空间可以增加IO性能

     2.表完全导入完毕后再创立索引

    3.表中总索引数不易过大

    2.SQL语句的优化

    1.用列名代替*

     使用*,SQL会对每个列进行匹配,降低效率

    2.当表与其他表没有任何关联时,可以用TRUNCATE代替DELETE

      TRUNCATE没有事务控制,性能高,但是要注意无法被rollback

    针对11g之前的优化方法 (基于规则的优化器)

    1. 用EXISTS代替IN,DISTINCT

    2. 二连表查询时,选择数据少的表作为驱动表(放在FROM的表列表的最后面)。循环驱动表中的数据和另一个表中的数据作连接查询。多表联查时,选择关联最多的表。

    3. 表连接条件放前面,过滤记录多的条件的子句放后面(因为SQL执行顺序是从右到左)

    3.表分区

    将数据量大的表分区也可以提升查询效率,还可以方便表的管理,备份,和恢复,提高表的安全性。

    分区方法:

    范围分区

    散列分区(根据哈希值)

    列表分区 (明确指定列来分区)

    指定分区查询

    select * from table partition(pt_rule);

  • 相关阅读:
    1022词法分析实验总结
    1008词法分析
    0909对编译原理的理解
    【Windows】如何判断当前鼠标是否按下左键或右键
    【Delphi】从内存(MemoryStream)使用WMP(WindowsMediaPlayer)控件播放视频音频(Play Video with WMP from MemoryStream)
    计算机基础
    对接微信公众号
    排序与搜索
    二叉树
    3- 面向对象进阶
  • 原文地址:https://www.cnblogs.com/yidan621/p/5224497.html
Copyright © 2020-2023  润新知