慢查询优化

慢查询

分析:

explain select 语句

优化

1.索引

  • 添加索引/复合索引
    • 索引AND可复合索引,单独时只用到一个
    • 需要考虑复合索引的字段顺序。例:

符合索引为(a,b,c,d)时,a = 1 and b=2 and c>3 and d=4 或者a = 1 and b=2 and d=4 and c>3时,用不到d索引。(a,b,d,c)则可以用到d。a,b,c,d的查询顺序可以任意调整,不影响,查询优化器会优化成索引可以识别的形式

想建立a,b字段联合索引,且b字段已有索引经常单独查询,则应建立(b,a)的联合索引。

2.表

  • 分表,大表拆小表
  • 合理设计表(范式、数据类型)

3.查询语句

3.1 查询内容
  • 尽量避免 select *,避免回表查询(首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录)
  • 调整where子句的连接顺序,将过滤数据多的条件放在前面
  • 避免在大表上的group by,order by,offset 操作
  • 尽量减少子查询(子查询会创建临时表,查询完毕删除临时表)
  • 尽量减少联表查询,联表查询是笛卡尔乘积的形式,检索的数据几何倍上升
  • 一次查询的结果最好不要过大,可以使用分页查询(limit),且利用表的覆盖索引来加速分页查询(查询的语句中只包含索引列)
3.2 避免索引失效
  • like以%开头
  • >、<号右边的索引会失效
  • !=、<>、not、is not null会导致索引失效
    • 优化方法: key<>0 改为 key>0 or key<0
    • is null是可以使用到索引的,is not null不能
  • 索引列参与计算、使用函数
  • 对于复合索引,如果不使用前列,后续列也将无法使用
  • or 语句前后没有同时使用索引
    • 两边都用索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值