前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >故障分析 | 同一条 SQL 为何在 MariaDB 正常,MySQL 5.7 却很慢?

故障分析 | 同一条 SQL 为何在 MariaDB 正常,MySQL 5.7 却很慢?

作者头像
爱可生开源社区
发布2020-04-27 10:04:29
6630
发布2020-04-27 10:04:29
举报

作者:王顺

爱可生 DBA 团队成员,在公司负责项目中处理数据库问题,喜欢学习技术,钻研技术问题。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


同一条 SQL 在 MariaDB 上运行正常,为什么在 MySQL 5.7 上运行很慢?

一、问题描述

客户生产环境数据库迁移,数据库从 MariaDB 10.4 迁移到 MySQL 5.7,一条业务 SQL 运行很慢。

从客户了解到业务之前在 MariaDB 运行正常,近期业务没有变更过,迁移到 MySQL 5.7 运行很慢,已经影响业务正常使用。

二、环境检查

(因生产环境涉及敏感信息,以下信息为测试环境信息)

1. MariaDB 的执行计划

2. MySQL 5.7 的执行计划

3. 表结构和列信息

三、分析过程

1. 通过执行计划分析

从 MySQL 5.7 执行计划的 warnings 中,可以清晰的看到 id 字段的字段类型或排序规则转换,无法使用索引。

2. 查看图 3 表结构和列信息对比,两个表的 id 字段排序规则不同存在隐式转换。

如下:

sbtest1 表 id 字段 char(32) 排序规则 utf8_bin

sbtest2 表 id 字段 char(32) 排序规则 utf8_general_ci

四、解决方法:

1. 将 sbtest1 表 id 字段排序规则 utf8_bin 改成 utf8_general_ci

可以看到排序规则改变后,执行计划正常。

2. 使用 convert 转换

使用 convert 对 sbtest1 表 id 字段进行转换,执行计划正常。

五、结论:

MySQL 5.7 检测到表 sbtest1 的 id 字段和表 sbtest2 的 id 字段的 collation 不同,没有正常走索引,造成查询很慢。通过改变排序规则或使用 convert 转换可以解决。由于 MariaDB 和 MySQL 的 collation 转换规则对执行计划的影响不同,在 MariaDB 中,不同的 Collation 并没有影响到查询效率。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爱可生开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、问题描述
  • 二、环境检查
  • 三、分析过程
  • 四、解决方法:
  • 2. 使用 convert 转换
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档