zoukankan      html  css  js  c++  java
  • Oracle学习札记[2]数据库查询优化原则

    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 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

     

    4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

     

     select id from t where num=10 or num=20

     

     可以这样查询:

     

     select id from t where num=10

     

     union all

     

     select id from t where num=20

     

    5.in 和 not in 也要慎用,否则会导致全表扫描,如:

     

     select id from t where num in(1,2,3)

     

     对于连续的数值,能用 between 就不要用 in 了:

     

     select id from t where num between 1 and 3

     

    6.下面的查询也将导致全表扫描:

     

     select id from t where name like '%abc%'

     

     若要提高效率,可以考虑全文检索。

     

    7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

     

     select id from t wherenum=@num

     

     可以改为强制查询使用索引:

     

     select id from t with(index(索引名)) wherenum=@num

     

    8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:

     

     select id from t where num/2=100

     

     应改为:

     

     select id from t where num=100*2

     

    9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:

     

     select id from t where substring(name,1,3)='abc'--name以abc开头的id

     

     select id from t where datediff(day,createdate,'2005-11-30')=0--'2005-11-30’生成的id

    10.应尽量避免在select子句中查询大数据类型(如:BLOB)的字段。

    11.大表跟小表进行关联查询 时,涉及到嵌套查询,先查询小表,然后再联合大表。

  • 相关阅读:
    图书管理系统---基于form组件和modelform改造添加和编辑
    Keepalived和Heartbeat
    SCAN IP 解释
    Configure Active DataGuard and DG BROKER
    Oracle 11gR2
    我在管理工作中積累的九種最重要的領導力 (李開復)
    公募基金公司超融合基础架构与同城灾备建设实践
    Oracle 11g RAC for LINUX rhel 6.X silent install(静默安装)
    11gR2 静默安装RAC 集群和数据库软件
    Setting Up Oracle GoldenGate 12
  • 原文地址:https://www.cnblogs.com/SmileX/p/2341697.html
Copyright © 2011-2022 走看看