数据库总结:sql优化

优化方向
是否请求了不需要的数据

1、大部分性能低的查询都可以减少访问数据量方式优化,适当加limit ;
2、多表关联时select * 操作,是否使用索引覆盖的优化;
3、相同数据查询次数考虑,可适当进行缓存;
4、Explain 中 type 列访问类型,慢到快:全表扫描、范围扫描、唯一索引、常数引用等
5、切分查询,分解关联查询,一次完成复杂查询还是分多次请求;
6、in or 查询

in() 对于mysql而言,将in()列表进行排序然后二分查找,时间复杂度为O(log n),而or的时间复杂度为O(n),所以,in()列表中有大量取值时,mysql速度更快;

count() 优化

作用:统计某个列的数量(不统计null),或者行数,(如果括号内是指定了列或列的表达式,则统计的就是表达式有值的结果数,换句话说表达式不可能为空是,实际就是统计行数)
count(*) 统计的就是行数,如果统计行数,就这样写,清晰且性能好;

limit 优化

场景问题:
偏移量非常大的时候,如limit 1000,20 这样的查询需要查询 10020条记录,只返回最后20条,前面10000条记录被抛弃,代价很高;
优化
1、尽可能使用索引覆盖,代替查询所有列;
2、配合offset使用:
如select * from table order by id desc limit 20; 前提是id 主键时单调增长的
然后配合 select *from table where id < 200 order by id desc limit 20;
假设第一个查询返回 180 到 200 数据;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值