• oracle常见sql语句优化


    1、* 号引起的运行效率

    尽量降低使用select * 来进行查询,当你查询使用*,
    数据库会进行解析并将*转换为所有列。

    select count(si.student_id) 
    from Student_info si(student_id为索引)

    select count(*) from Student_info si
    运行时.上面的语句明显会比以下没实用索引统计的语句要快

     

    2、避免在索引列上使用计算.

    WHERE 子句中,假设索引列是函数的一部分.优化器将不使用索引而使用全表扫描.

    举例 :

    低效:

    SELECT … FROM  DEPT  WHERE SAL * 12 > 25000;

    高效 :

    SELECT … FROM DEPT WHERE SAL > 25000/12;

    3、用 >= 替代 >

    高效 :

    SELECT * FROM  EMP  WHERE  DEPTNO >=4

    低效 :

    SELECT * FROM EMP WHERE DEPTNO >3

    两者的差别在于 , 前者 DBMS 将直接跳到第一个 DEPT 等于 4 的记录而后者将首先定位到 DEPTNO=3 的记录而且向前扫描到第一个 DEPT 大于 3 的记录 .

    4 、 用 UNION 替换 OR ( 适用于索引列 )

    通常情况下 , 用 UNION 替换 WHERE 子句中的 OR 将会起到较好的效果 . 对索引列使用 OR 将造成全表扫描 . 注意 , 以上规则仅仅针对多个索引列有效 . 假设有 column 没有被索引 , 查询效率可能会由于你没有选择 OR 而减少 . 在以下的样例中 , LOC_ID 和 REGION 上都建有索引 .

    高效 :

    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”

    假设你坚持要用 OR, 那就须要返回记录最少的索引列写在最前面 .

    5、用 IN 来替换 OR

    这是一条简单易记的规则,可是实际的运行效果还须检验。在 ORACLE8i 下。两者的运行路径似乎是同样的.

    低效 :

    SELECT …. FROM LOCATION WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30

    高效

    SELECT … FROM LOCATION WHERE LOC_IN   IN (10,20,30);

    6、避免在索引列上使用 IS NULL 和 IS NOT NULL

    7、where运行顺序

    where运行会从至下往上运行

    select *

    from student_info si --学生信息表

    where si.school_id=10 --学院ID

    and  si.system_id=100--系ID

    摆放where子句时,把能过滤大量数据的条件放在最下边

    8、from字段中的优化:

    Oracle安照从右到左的顺序载入表数据,应该把能够排除数据最多的表放到后面(基础表)

    比方,在关联查询中,把课程表放到后面。成绩表放到前面。由于课程表数据一般比較少,关联的时候能够高速的过滤掉一些成绩数据。

    9、索引失效

    1、运算导致的索引失效

    2、类型转换导致的索引失效

    3、在索引列上进行计算引起的问题

    4、 Is not null引起的问题(student_id为索引)

    5、Order by导致索引失效(student_id为索引)

    6、自己主动选择索引

    7、 !=导致索引失效

    8、%导致的索引失效

     

     

     


  • 相关阅读:
    发款php蜘蛛统计插件只要有mysql就可用
    利用mysql来做一个功能强大的在线计算器
    IndexOf、lastIndexOf、substring的用法
    需求分析工具的软件
    JSP程序设计
    灵活有效的数据仓库解决方案:第1部分:客户互动和项目计划
    灵活有效的数据仓库解决方案,第3部分:设计并实现仓库ETL过程
    Devpress.XtraGrid.GridControl.GridView 属性
    8种人将被淘汰
    WCF配置中遇到的问题:如何把Hostname修改成IP
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6923691.html
Copyright © 2020-2023  润新知