为什么这个简单的查询在 MySQL 8.0.25 这么慢?

2022-09-15 10:56:43 +08:00
 yiplee

有一张简单的表 t ,总共 11 个字段 ,关键字段如下:

  1. id int64 自增主键
  2. a char(36) NOT NULL
  3. b char(36) NOT NULL
  4. c char(36) NULL

除主键索引之外,还有两个索引:

  1. UNIQUE INDEX (a)
  2. INDEX (b)

现在有一个简单的查询

SELECT * FROM t WHERE b = ? AND c IS NOT NULL AND id > ? LIMIT 32 ORDER BY id ;

在表有大几千万条数据,并且 WHERE 匹配到的行数很多的时候,同样的数据在 MySQL 5.7.x 版本查询非常快,1s 以内,但是在另外一台 MySQL 8.0.25 上就要二十几秒,可能是什么原因呢?

6750 次点击
所在节点    MySQL
58 条回复
thinkershare
2022-09-15 11:05:54 +08:00
where 匹配非常多, 优化器可能不走索引,本来就慢, 你这个做了读写分离没有? 插入很多时候会严重影响读取的性能.
wanguorui123
2022-09-15 11:10:45 +08:00
用性能分析命令看看
liuxu
2022-09-15 11:12:01 +08:00
yiplee
2022-09-15 11:16:06 +08:00
@thinkershare #1 补充一些情况:

- 没有读写分离
- 这张表断断续续的有 insert ,没有 update ,insert 是起事务一次批量写入几十条
xuanbg
2022-09-15 11:16:20 +08:00
看下执行计划,讲道理这个查询是走索引的的,因为 b 列有索引。
yiplee
2022-09-15 11:22:29 +08:00
@liuxu #3 赞,我学习下
yiplee
2022-09-15 11:22:44 +08:00
@xuanbg #5 我也是这么以为的 😂
circle33
2022-09-15 11:24:48 +08:00
两台机器还有啥不一样吗?
optional
2022-09-15 11:25:05 +08:00
有 order by id 和>id 走的应该是主键索引,或者直接全表了。
yiplee
2022-09-15 11:28:06 +08:00
@circle33 #8 配置都不低,处理这张简单的表的数据量肯定是没问题的
sulinwork
2022-09-15 11:28:29 +08:00
explan 看看
yiplee
2022-09-15 11:28:48 +08:00
@optional #9 看执行时间应该是扫描了很多行
circle33
2022-09-15 11:31:35 +08:00
会不会慢的那台机器 `c IS NOT NULL` 的数据太多了
LeegoYih
2022-09-15 11:34:13 +08:00
试试用 force index
或者 order by (id+0)
123qwerty
2022-09-15 11:35:58 +08:00
在两个版本的 MySQL 中 explain 语句,看下有没有什么不同
yiplee
2022-09-15 11:37:00 +08:00
@circle33 #13 这张表 ```c IS NOT NULL``` 只有极少的行不满足,所以就没在 c 上加索引;两个数据库数据都是一样的。
circle33
2022-09-15 11:41:09 +08:00
explain 的 type 是什么
rrfeng
2022-09-15 11:44:29 +08:00
explain 打出来啊,看看走了哪个索引。
比如走了 b 还扫描了非常多行,说明 b 的值不够分散,加索引也没用。
wolfie
2022-09-15 11:45:14 +08:00
建联合索引,或者 force index(b)
djoiwhud
2022-09-15 12:00:13 +08:00
有点好奇,你的 sql 可以执行?

select * from table where order by limit n

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/880186

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX