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需要一次排序,其他至少需要两次排序。

原文地址:https://www.cnblogs.com/quyangyang/p/11173448.html