MySQL 索引优化实战:从一分钟查不出到毫秒级返回
一次真实的慢查询排查记录:一张 1000 多万行的业务表,一条看似普通的 SQL 跑了一分钟没出结果。从 OR 条件、单列索引与联合索引的误区,到 EXPLAIN 逐列解读、覆盖索引的"假象"、最左前缀原则,完整复盘整个优化过程。 背景 业务上有一个很常见的需求:查询某个用户经 …
TAG
12 篇文章
一次真实的慢查询排查记录:一张 1000 多万行的业务表,一条看似普通的 SQL 跑了一分钟没出结果。从 OR 条件、单列索引与联合索引的误区,到 EXPLAIN 逐列解读、覆盖索引的"假象"、最左前缀原则,完整复盘整个优化过程。 背景 业务上有一个很常见的需求:查询某个用户经 …
本文为 AI 整理。 最近排查了一条 MySQL 8 的 UPDATE SQL。表的数据量不算特别大,主表约 30 万行,关联表约 1 万多行,但会导致死锁 这个问题比较典型,记录一下排查过程。 1. 原始 SQL 业务逻辑很简单:根据关联表中的某个父级 ID 找到一批业务 …
案例背景:某业务系统在执行单条数据删除时频繁报错 Lock wait timeout exceeded,初步怀疑是数据量过大导致超时,经排查实为锁竞争问题。本文完整记录从现象到根因的排查过程,以及 MySQL 8.0 下的适配方案,供参考。 一、问题现象 业务系统调用删除接口时 …
在上一篇文章《[[使用 pt-archiver 迁移 mysql 数据]]》中,我介绍了使用 Percona Toolkit 工具集中的 pt-archiver 进行历史数据归档的方法。 pt-archiver 功能强大且成熟,但在某些特定场景下,它的性能表现并不尽如人意。 例如 …
在软件系统中,随着业务增长,有些表数据量会越来越大,为了提升性能,会将表进行拆分。这就需要定时将数据从源表迁移到目标表。 通常使用一个 sql 语句就能实现数据的迁移: 1 2 3 4 insert into t_business_finished select * from …
最近公众号有人留言:为啥使用 ProxySQL 而不使用 InnoDB Cluster ? 其实使用什么方案,根据实际情况进行权衡利弊即可,如果先部署了 MGR ,想在此基础之上完善高可用,添加 ProxySQL 比较方便。如果新部署一个高可用环境,直接使用 InnoDB …
MGR 解决了高可用的问题,但如果数据库访问量大,特别是读多写少的场景,就需要读写分离架构了了,在 MGR 的基础上,前面加上 ProxSQL 就可以实现读写分离。 应用程序只和 ProxySQL 打交道 ProxySQL 做为应用和 MGR 集群中间的一个桥梁,让应用对 MGR …
MySQL 的高可用可以选择 MGR 方案,部署 MGR 很简单,可以参考《MySQL高可用-使用Docker部署MGR》,但在运行过程中,如果出现问题,如何快速解决?需要持续学习和实践。 下面我以实际用到的和我搜集到的一些资料来说说 MGR 在运维过程中的常见问题和注意事项。 …
MySql 的高可用方案很多,有 MHA、MGR、MySQL InnoDB Cluster 等。起初想学习下 MHA,了解后发现 MHA 在 Github 上的仓库已经没有更新了。不过 MHA 的兼容性比较好,有老版本的 MySQL 需要做高可用,还是值得一试的。 本文介绍下 …
在上一篇中《在CentOS7中使用Docker安装MySql》中介绍了怎样在Docker中安装Mysql,但存在两个问题: 1、用户密码和字符集等的设置,需要安装完MySql后,进入到MySql中去设置,非常麻烦; 2、配置文件和数据文件都在MySql的容器内,不是很安全。 本文 …