• Oracle 学习笔记(四)


    一、高效 SQL 语句原则

    •   在where 中用 = 关系运算时
    •  避免用函数在关系运算中,除非你使用函数建立索引
    •  尽量不要隐式转化数据类型,数据类型一定要匹配
    •  尽量将一句SQL分成多个语句完成
    •  不能差分的请用UNION ALL 来组合
    •  条件确定的子查询  Exist 适合于外表小,内表大    in  适合于外表大,内表小
    •  使用视图的注意事项
    •  复杂视图的连接要小心,尤其有外键的时候
    •  当查询的是视图中引用的部分表的时候,请不要使用视图,或者建立新的更小的表
    •  存储中间结果
    •  对查询中可能多次调用的结果集,请保存
    •  考虑使用物化视图
    •  将复杂的不能优化的查询分阶段完成
    •  尽量减少访问数据的次数
    •  使用 case 语句
    •  使用高级分组rollup,cube
    •  使用存储过程
    •  使用 RETURNING 子句

    二、全表扫描

    •    全表扫描:将高水位线下的数据块都读一遍。
    •    DB_FILE_MULTIBLOCK_READ_COUNT 参数决定扫描的速度,该参数的值乘以块的
    •    大小应该小于操作系统的最大io
    •    因为范围是连续的块,所以全表扫描会连续的读,效率很高   

    三、何时会使用全表扫描

     1.表小

     2.索引缺少,条件判定列上没有索引

     3.使用hint,强制使用全表扫描

     4.读的数据比重大。一般超过 10%的数据要读取就会选择全表扫描

     5.并行查询,和索引是对立的,两者必须选择一个

     四、全表扫描的优化
       1.回收高水位线
       2.DB_FILE_MULTIBLOCK_READ_COUNT 加大
       3.使每个块装的数据更多,减少 pctfree
       4.使用并行查询
       alter system set db_file_multiblock_read_count=32;修改参数配置,默认为16 个块
       alter table t1 pctfree 0; 将每个数据块都装满
       alter table t1 move tablespace users;  移动表空间

    五、 数据库查询的优化,Hints
        Hints,即提示,强制该语句以我们指定的方式运行,作用范围是当前语句,对后面语句不影响。书写时,一定要放在第一个单词(select) 的后面。Hints 的写法有两种:  /*+ 提示 */  , --+ 提示

    六、SQL  查询优化

    1.尽量避免在一个复杂查询里面使用 LIKE '%parm1%'     百分号会导致相关列的索引无法使用,最好不要用.  

      •   在前端进行下拉框的输入搜索
      •  在后端进行查询范围控制,不查询无关数据  

    2. 索引   

      •  数据量大的时候,建立索引   
      •  避免对索引进行计算操作   
      •  避免在索引列上使用 not, <>, !=   
      •  .避免在索引列上使用 is null 和 is not null   
      • 避免在索引列上使用数据类型转换   
      •  .避免在索引列上使用函数   
      •  避免在索引列上使用空值   

    3. 复杂查询     可将复杂查询进行拆分,分步进行  

    4. 尽量使用 union all    union 会对数据进行排序,并去除重复的行,比较消耗资源    union all 则不进行排序,不去除重复的行   

    5. 在where 语句中合理使用 in , not in ,exist,not exist    Exist 适合于外表小,内表大    in  适合于外表大,内表小  

    6. 排序    避免使用消耗资源的操作,带有 distinct, uinon,minus,intersect,order by 的语句    会启动 sql 引擎,distinct  需要一次排序,而其它至少需要执行2次排序。

    7. 临时表    慎重使用临时表,可以极大的提高性能。   

  • 相关阅读:
    JDK、J2EE、J2SE、J2ME的区别
    消息队列
    Unity3D 导入aar注意事项
    汇编小结
    构造函数语意学--笔记
    androidStudio 改包名
    新手用车
    北京临牌办理与续办
    h5+
    apache.http.MalformedChunkCodingException: Chunked stream ended unexpectedly
  • 原文地址:https://www.cnblogs.com/wisdo/p/7439816.html
Copyright © 2020-2023  润新知