SQL 优化总结

本文介绍了一系列SQL查询优化的方法,包括避免全表扫描、合理使用索引、减少null值的使用、避免使用or连接条件等,有助于提升数据库查询效率。
  1. 尽量避免全表扫描,考虑在where及order by 涉及的列上建立索引
  2. 最好不要给数据库留null,尽可能使用not null约束填充数据库,避免在where子句中对字段进行null判断,否则将导致引擎放弃使用索引而进行全表扫描;如:
    select * from user where name is null;
  3. 应该尽量避免在where子句中使用!=或<>操作符,否则将导致引擎放弃使用索引而进行全表扫描;
  4. 应该尽量避免在where子句中使用or来连接条件,如果or的两个字段,一个有索引,一个没有索引,将导致引擎放弃使用索引而进行全表扫描;如:

    select id from user where age = 10 or address = '成都';
    -- 可优化为: --
    select id from user where age = 10
    union all
    select id from user where address = '成都';
  5. 慎用in 和 not in,否则会进行全表扫描;in和exists的区别单独说明;
  6. 避免使用:like '%abc%',否则会进行全表扫描;如:
    select name from user where name like '%chisaki%';
  7. 尽量避免在where子句中对字段进行表达式操作,否则将导致引擎放弃使用索引而进行全表扫描;如:
    select name from user where age/2 = 10;
    -- 应改为:--
    select name from user where age = 10 * 2;
  8. 尽量避免在where子句中对字段进行函数操作,否则将导致引擎放弃使用索引而进行全表扫描;如:
    select name from user where substring(name,1,3) = 'abc';
    --  应改为: --
    select name from user where name like 'abc%';
  9. 避免在where子句中的 “=” 左边进行函数、算术运算或者其他表达式运算,否则系统将可能无法正确使用索引;
  10. 在使用索引字段作为条件时,如果该索引时符合索引,那么必须使用到该索引的第一个字段作为条件时才能保证系统使用该索引,否则索引不会使用,并且尽可能的让字段顺序与索引顺序一致;
  11. 对于多张大数据量的表join,要先分页在join,否则逻辑读会很高,性能很差;
  12. 索引并不是越多越好,索引能提高select的效率,但是降低了insert及update的效率,一个表的索引最好不要超过6个;
  13. 避免使用select * ,用具体的字段代替*,不要返回不使用的字段。

转载自:https://www.cnblogs.com/yunfeifei/p/3850440.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值