MySQL升级后SELECT查询耗时太长

时间:2018-04-09 10:16:03

标签: mysql sql database

我刚刚将MySQL版本更新为5.7。 SELECT查询有四个INNER-JOINS并且之前需要大约3秒才能执行,现在需要很长时间才能跟踪它。一些分析表明“发送数据”部分耗时太长。谁能告诉我出了什么问题?这是一些数据。请注意,此时查询仍在运行:

    +----------------------+-----------+
    | Status               | Duration  |
    +----------------------+-----------+
    | starting             |  0.001911 |
    | checking permissions |  0.000013 |
    | checking permissions |  0.000003 |
    | checking permissions |  0.000003 |
    | checking permissions |  0.000006 |
    | Opening tables       |  0.000030 |
    | init                 |  0.000406 |
    | System lock          |  0.000018 |
    | optimizing           |  0.000019 |
    | statistics           |  0.000509 |
    | preparing            |  0.000052 |
    | executing            |  0.000004 |
    | Sending data         | 31.881794 |
    | end                  |  0.000021 |
    | query end            |  0.003540 |
    | closing tables       |  0.000032 |
    | freeing items        |  0.000214 |
    | cleaning up          |  0.000028 |
    +----------------------+-----------+

这是EXPLAIN的输出:

+----+-------------+--------------------+------------+------+---------------+------------+---------+-------+---------+----------+----------------------------------------------------+
| id | select_type | table              | partitions | type | possible_keys | key        | key_len | ref   | rows    | filtered | Extra                                              |
+----+-------------+--------------------+------------+------+---------------+------------+---------+-------+---------+----------+----------------------------------------------------+
|  1 | SIMPLE      | movie_data_primary | NULL       | ref  | cinestopId    | cinestopId | 26      | const |       1 |   100.00 | NULL                                               |
|  1 | SIMPLE      | mg                 | NULL       | ALL  | NULL          | NULL       | NULL    | NULL  |  387498 |    10.00 | Using where; Using join buffer (Block Nested Loop) |
|  1 | SIMPLE      | crw                | NULL       | ALL  | NULL          | NULL       | NULL    | NULL  | 1383452 |    10.00 | Using where; Using join buffer (Block Nested Loop) |
|  1 | SIMPLE      | cst                | NULL       | ALL  | NULL          | NULL       | NULL    | NULL  | 2184556 |    10.00 | Using where; Using join buffer (Block Nested Loop) |
+----+-------------+--------------------+------------+------+---------------+------------+---------+-------+---------+----------+----------------------------------------------------+

1 个答案:

答案 0 :(得分:0)

升级msssql版本时看起来像索引问题 - 文档说 -

  

如果执行二进制升级而不转储和重新加载表,   你无法直接从MySQL 4.1升级到5.1或更高版本。这个   由于MyISAM表索引中的不兼容更改而发生   在MySQL 5.0中格式化。从MySQL 4.1升级到5.0并修复所有   MyISAM表。然后从MySQL 5.0升级到5.1并检查和   修复你的表。修改字符集或   排序规则可能会更改字符排序顺序,从而导致排序   对使用受影响字符的任何索引中的条目进行排序   设置或整理不正确。这样的变化导致了几个   可能出现的问题:与以前不同的比较结果   结果         由于索引条目错误而无法找到某些索引值         错误的ORDER BY结果         CHECK TABLE报告为需要修复的表

检查链接 -

1)checking-table-incompatibilities

2)check-table

3)rebuilding-tables