zoukankan      html  css  js  c++  java
  • mysql索引不生效

    公司服务用的mysql,最近在查询时时间很慢,经常会上10多秒,查看了一下查询的执行计划,发现索引没有生效。

    存储引擎使用InnoDB。

    一开始在主库查询,一直很好奇为什么索引不生效,切换到备库之后,发现备库是有效的。

    开始考虑是不是因为索引出问题,后对索引重建,发现效率高了不少。

    简单记录一下对比。

    mysql> explain select * from runinfo where status in (0, 2, 1, 3, 4, 7, 9, 10);
    +----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
    | id | select_type | table   | type  | possible_keys | key  | key_len | ref  | rows     | Extra       |
    +----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
    |  1 | SIMPLE      | runinfo | All   | status_2      | NULL | NULL    | NULL |  2378055 | Using where |
    +----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
    1 row in set (0.00 sec)

    上面是主库的执行计划。

    对比一下备库的执行计划。

    mysql> explain select * from runinfo where status in (0, 2, 1, 3, 4, 7, 9, 10);
    +----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
    | id | select_type | table   | type  | possible_keys | key      | key_len | ref  | rows | Extra       |
    +----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
    |  1 | SIMPLE      | runinfo | range | status_2      | status_2 | 4       | NULL |  116 | Using where |
    +----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
    1 row in set (0.00 sec)

    可以看出,备库在查询时适应到索引 status_2。

    执行如下的命令之后,问题解决。

    mysql> OPTIMIZE TABLE runinfo;
    +------------------+----------+----------+-------------------------------------------------------------------+
    | Table            | Op       | Msg_type | Msg_text                                                          |
    +------------------+----------+----------+-------------------------------------------------------------------+
    | schedule.runinfo | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
    | schedule.runinfo | optimize | status   | OK                                                                |
    +------------------+----------+----------+-------------------------------------------------------------------+
    2 rows in set (47.13 sec)

    第二天来看,查询再一次变慢,有点好奇是不是有新数据写入导致索引不更新。 

  • 相关阅读:
    字符串前面加@
    SQL字段类型bit 查询时注意
    SELECT IDENT_CURRENT(tableName)和自增长列的纠结
    解析xml文件 selectSingleNode取不到节点
    【.NET】.NET MVC4 微信扫一扫功能实现附全部代码
    未定义对象
    C# Web开发中弹出对话框的函数[转载]
    json序列化和反序列化
    jq的$.each()方法
    学习URLRewriter.dll的使用
  • 原文地址:https://www.cnblogs.com/gromit409/p/7543929.html
Copyright © 2011-2022 走看看