mysql慢查询优化

近期查看业务数据库的慢查询,发现一条查询,平均要4s才能结束,查了表里的数据,表中只有400多万条数据,不应该这么慢呀。看了一下mysql的监控,内存使用率85%,想着可能是内存不够用,扩了一下内存,内存使用率15%,同样的查询语句还是慢。记录了一下解决过程。

1.用explain分析一下查询语句

explain select * from picquery where task_id=1 and state=1 order by id limit 1 \G;

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: picquery
   partitions: NULL
         type: index
possible_keys: picquery_task_id_1dddd3f3_fk_task_id,task_id_state_annotator_id
          key: PRIMARY
      key_len: 8
          ref: NULL
         rows: 11
     filtered: 0.14
        Extra: Using where

发现实际走的索引是主键,没有用到idx_task_id_state_annotator_id,很奇怪没有用到这个索引。

2.去掉查询语句中的order_by

explain select * from engine_picquery where task_id=1 and state=1 limit 1 \G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: engine_picquery
   partitions: NULL
         type: ref
possible_keys: picquery_task_id_1dddd3f3_fk_task_id,task_id_state_annotator_id
          key: task_id_state_annotator_id
      key_len: 8
          ref: const,const
         rows: 23456
     filtered: 100.00
        Extra: NULL

去掉order_by之后,就选择正确的索引了

3.解决方案
在sql语句中加入 force index(xxxxx), 强制使用指定的索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值