升级到5.6后Mysql在所有字段中搜索字符串变慢

Posted

技术标签:

【中文标题】升级到5.6后Mysql在所有字段中搜索字符串变慢【英文标题】:Mysql search string in all fields slowness after version upgraded to 5.6 【发布时间】:2021-09-15 18:43:12 【问题描述】:

当前的mysql版本是5.5。我将副本升级到 5.6 版。

以下查询从 5.5 开始执行 15 秒。 但是 5.6 版需要 750+s 才能运行相同的查询。

查询:

SELECT  SQL_NO_CACHE *
    FROM  RECORDS
    LEFT OUTER JOIN  AUTH  ON RECORDS.`id` = AUTH.`id`
    LEFT OUTER JOIN  STAFFCOMMENTS  ON RECORDS.`id` = STAFFCOMMENTS.`id`
    WHERE  (ODATE LIKE '%Jan%')
      AND  (ODATE LIKE '%2021%')
      AND  RECORDS.NAME <> 'CUSTOMER'
      AND  (RECORDS.NAME <> 'COURIER-ORDER')
  order BY RECORDS.ID DESC
    LIMIT  35000 

【问题讨论】:

总是为所有invilved的表添加create table和一个EXPLAIN SELECT *来查看使用了哪些索引 语法“RECORDS BY”是什么意思? 多少内存? my.cnf 文件是否相同? RECORDS 有多少行? ODATE 在哪个表中? ODATE 的数据类型是什么? 严肃问题:为什么要费心将服务器升级到不再受支持的软件版本? 5.6 已于 2021 年 2 月终止支持。为什么不选择最新的稳定软件版本? en.wikipedia.org/wiki/MySQL#Release_history 谢谢大家。我的数据库引擎是 mysql 5.5 版本的 MISAM。我在 mysql 5.6 版本中将引擎更改为 InnoDB。它解决了问题 【参考方案1】:

假设ODATE 的数据类型为DATEDATETIME(应该是!),更改

       (ODATE LIKE '%Jan%')
  AND  (ODATE LIKE '%2021%')

       ODATE >= '2021-01-01'
  AND  ODATE  < '2021-01-01' + INTERVAL 1 MONTH

然后给我们展示索引,以便我们判断是否可以改进。

【讨论】:

以上是关于升级到5.6后Mysql在所有字段中搜索字符串变慢的主要内容,如果未能解决你的问题,请参考以下文章

将 mysql 从 5.6 升级到 5.7 后“在用户表中找不到任何匹配的行”

Mysql 5.0 LAST_INSERT_ID() 升级到 5.6 后有所不同

MySQL从5.5升级到5.6,TIMESTAMP的变化

升级过程中从 5.6 到 5.7 的 AWS RDS MySQL 复制

将 Perl 从 5.6 升级到 5.24

mysql从5.6升级到5.7后出现 Expression #1 of ORDER BY clause is not in SELECT list,this is incompatible with