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

故障分析 | 同一条 SQL 为何在 MariaDB 正常,MySQL 5.7 却很慢?作者:王顺 爱可生 DBA 团队成员,在公司负责项目中处理数据库问题,喜欢学习技术,钻研技术问题。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。…

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

作者:王顺 爱可生 DBA 团队成员,在公司负责项目中处理数据库问题,喜欢学习技术,钻研技术问题。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


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

一、问题描述

客户生产环境数据库迁移,数据库从 MariaDB 10.4 迁移到 MySQL 5.7,一条业务 SQL 运行很慢。从客户了解到业务之前在 MariaDB 运行正常,近期业务没有变更过,迁移到 MySQL 5.7 运行很慢,已经影响业务正常使用。

二、环境检查

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

  1. MariaDB 的执行计划

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

  1. MySQL 5.7 的执行计划

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

  1. 表结构和列信息

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

三、分析过程

  1. 通过执行计划分析

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

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

  1. 查看图 3 表结构和列信息对比,两个表的 id 字段排序规则不同存在隐式转换。如下:sbtest1 表 id 字段 char(32) 排序规则 utf8_binsbtest2 表 id 字段 char(32) 排序规则 utf8_general_ci

四、解决方法:

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

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

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

  1. 使用 convert 转换

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

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

五、结论:

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8876.html

(0)
上一篇 2023-02-20
下一篇 2023-02-20

相关推荐

  • Python新建文件

    Python新建文件Python是一种强大的编程语言,也是一个具有广泛应用的工具。Python语言可以帮助程序员实现许多任务,其中之一就是创建新文件。在这篇文章中,我们将介绍如何使用Python创建新文件,并探讨Python新建文件的多种使用场景与方法。

    2024-04-24
    72
  • 用Python编写快速的数据分析程序

    用Python编写快速的数据分析程序在当今数字时代,数据分析已成为一项十分重要的技能,它使得企业能够挖掘内部和外部的重要信息,并为企业提供决策支持。数据分析可以使得企业掌握消费者的购买能力,评估产品和服务的效果,确立最佳的营销战略。随着今天的技术发展,数据分析变得更加简单和快速,Python编程语言是数据分析的主要工具之一。

    2024-02-23
    129
  • 京东零售大数据云原生平台化实践[亲测有效]

    京东零售大数据云原生平台化实践[亲测有效]导读: 今天为大家介绍京东零售大数据的云原生平台化实践,主要包括以下几大方面内容: 云原生的定义和理解 云原生相关技术的演化 京东大数据在云原生平台化上的实践 云原生应用平台的发展 分享嘉宾:刘仲伟

    2023-06-18
    145
  • 使用Redis Data Reveal(rdr)查看Redis中key占用内存空间[通俗易懂]

    使用Redis Data Reveal(rdr)查看Redis中key占用内存空间[通俗易懂]项目响应速度要求比较高,全部使用Redis缓存这也导致缓存。需要分析各种键占用内存情况进行优化。 redisclient虽然可以很方便的对redis进行操作,但不能查看对应key占用的内存情况,也无法

    2023-03-16
    152
  • Python正则表达式可选项的使用

    Python正则表达式可选项的使用正则表达式是处理文本的强大工具,它可以在文本中定位特定的字符模式,并对这些模式进行操作。Python内置了re模块,可以使用正则表达式来处理字符串。在Python的正则表达式中,有很多可选项可以控制正则表达式的匹配方式。下面将会讨论一些常用的可选项,包括:

    2023-12-16
    113
  • 数据结构第六章树和二叉树自测题答案_数据结构第三章答案

    数据结构第六章树和二叉树自测题答案_数据结构第三章答案树和森林 这篇博客继续我们的《数据结构导论》课程,今天重点说说树和森林怎么备考自考和通过期末考试。 在开始之前,上篇博客最后其实还有一点没有写完,就是如何通过已知序列,恢复一棵二叉树 看例题吧 假设一

    2023-01-22
    157
  • Python Time格式化使用指南

    Python Time格式化使用指南时间是人类和计算机通信的重要媒介,在计算机编程中,时间的处理是不可避免的。Python的time模块提供了操作时间的方法,包括获取当前时间、时间戳和时区等。在实际应用中,将时间按照一定的格式进行展示和处理也很重要。本篇文章将详细介绍Python中如何使用time模块对时间进行格式化处理。

    2024-07-01
    44
  • 找不到VCRUNTIME140.DLL_没有找到vcruntime140.dll

    找不到VCRUNTIME140.DLL_没有找到vcruntime140.dll背景: 安装mysql8的时报错:由于找不到VCRUNTIME140_1.dll,无法继续执行代码 解决方法 : 微软官网下载最新的2015-2019vc++支持包 安装完成后打开C:Windows…

    2023-02-02
    152

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注