zoukankan      html  css  js  c++  java
  • sql 优化

    1.关键字段建立索引。
    2.使用存储过程,他使sql更加灵活高效。
    3.备份数据库合情理垃圾数据
    4.sql语句的语法的优化
    5.清理清除日志

    1.用 union all代替or
    2.建立索引
    3,避免隐式转换,导致素引失效
    4.视图的优化:结合业务逻辑,考虑创建物化视图,通过其中间存储来消除不必要的全表扫描。(有局限)业务需求是否允许足够的刷时间。
    5.当sql中有排序时,通过创建排序索引优化sql
    6,from2张表时,数据条数最少的表放在最后,即将基础表放到最后
    例:tab1 1000条 tab2 1条
    最优策路: select count(*) from tab1,tab2;
    7.3个以上的表连接,将交叉表作为基础表放到最后
    例:sys_uer用户表, sys_org 机构表,sys_user_org 用户机构关系表(即交叉表)
    select * from sys_ user a, ays_org b , ays_ user_org c where c.user_org_id between 1000 and 2000 and c.user_id=a.user_id and c.org_id=b.org_id;
    8. where条件子句中的链接顺序
    采用从后往前的顺序解析 where子句,所以表之间的链接必须写在其他where条件之前,那些可以过滤掉最大数量记录的条件必须写在where子句的末尾,同时在链接的表中能过滤的就先过滤
    例如: select ... from emp e where 25 < (select count(*) from emp where mgr = e.empno ) and sal > 50000 and job = 'manager';
    9.避免select * 的使用
    10.尽量使用 commit
    11. count(*)比 count(1)稍快,当表的ID列有素引。count(ID)是最快的
    12.用 where子句替换 havind子句
    select region, avg( log size) from location where region !='sydney' and region !=' perth' group by region; --高效
    select region, avg( log size) from location group by region having region !=' sydney' and region!=' perth' --低效
    13.通过内部函数提高sql效率。
    14.使用表的别名
    15,用exist代替in
    16,用 not exists 代替 not in
    17.使用表链接代替 exists
    18.避免在索引列上使用计算
    select .... from dept where sal* 12>25000; 一低效
    select ... from dept where sal > 25000/12; --高效
    19 .用>=代替>
    20.用in替换or
    21,选免在索引上使用is null 和1= is not nuIl
    22.带有 distinct, union, minus, intersect, order by的sql语句会启动q1引擎,执行耗费资源的排序功能,distinct需要一次排序,其他至少需要两次排序。

  • 相关阅读:
    【Oracle】实体化视图
    安装Linux Centos系统硬盘分区方法
    .NET基础一
    【MySQL】无法启动mysql服务(位于本地计算机上)错误1067,进程意外中止
    Linux基础一
    SQL Server中生成100万行8位纯数字的随机数(转)
    SQL Server配置数据库邮件
    SQL点点滴滴_聪明的小写法(持续更新中)
    过去的2017和已经到来的2018
    【Oracle】PL/SQL Developer使用技巧(持续更新中)
  • 原文地址:https://www.cnblogs.com/quyangyang/p/11173448.html
Copyright © 2011-2022 走看看