升级到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
的数据类型为DATE
或DATETIME
(应该是!),更改
(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 后有所不同
升级过程中从 5.6 到 5.7 的 AWS RDS MySQL 复制
mysql从5.6升级到5.7后出现 Expression #1 of ORDER BY clause is not in SELECT list,this is incompatible with