自己总结的实用sql 优化

....一些来自于博客学习,

    一些来自于项目中的实践.

重点在于分享.

--sql 优化:
    1), Oracle 数据库解析器从右向左解析.
         where 子句能过滤掉最多的放最后面.
         from 子句,数据越少的表作为基础表,放最后;如果有中间表,基础表为中间表.
        
    2), 不要使用'*',因为会通过数据字典将'*'转化成所有的列.
    
    3), 减少数据库访问;
         可以用对象或者JSON暂存,最后提交的时候在访问数据库,比如 还款顺序配置;
         可以一次性多查,即使没有相关联的表,也可以一个sql查出需要字段.
        
    4), 用TRUNCATE代替DELETE;
         TRUNCATE是DDL语句,DELETE是dml语句,会放到回滚段(rollbacksegments)中.
        
    5), 在关联多张表的时候,一定要使用别名,即使没有歧义的列,也要用别名指明列.
    
    6),  能用子查询的就不要关联表.
    
    7), 用EXISTS替代IN、用NOTEXISTS 替代NOT IN;
         IN,或者NOT IN都将执行内部排序和合并,NOT IN是效率最低的,他会全表扫描.
         oracle遇到not,都会放弃索引,全表扫描.
        
    8), sql语句用大写形式;
         因为oracle总是先解析sql语句,先将sql语句转化为大写再执行;sql语句用大写的;
        
    9),  避免在索引列上写函数或者计算,这样会放弃索引,全表扫描.
         低效:SELECT… FROM DEPT WHERE SAL * 12 > 25000;
         高效:SELECT… FROM DEPT WHERE SAL > 25000/12;
    
    10), 创建合理的索引,多用联合索引,使用联合索引的时候一定要保持索引顺序,避免未使用到索引,而全表扫描.
    
   
转载时请注明.

猜你喜欢

转载自blog.csdn.net/Brico_CSDN/article/details/79792561