使用`id in (max(id))`子查询时查询速度极慢问题排查
Aurora RDS(MySQL)子查询性能异常问题
近期将数据库从MariaDB迁移至AWS Amazon Aurora RDS(MySQL)后,发现一组查询存在性能异常:单独执行的两个子查询速度都很快,但嵌套为子查询时耗时大幅上升。其中id为表的主键。
测试情况
- 执行语句
SELECT * FROM users where id in(SELECT max(id) FROM users where id = 1);,耗时约350ms - 执行语句
SELECT * FROM users where id in(SELECT id FROM users where id = 1);,耗时约130ms - 单独执行
SELECT max(id) FROM users where id = 1;,耗时约130ms - 单独执行
SELECT id FROM users where id = 1;,耗时约130ms
问题推测
我们推测该问题与max函数返回值的类型有关,导致外层查询忽略了主键索引。原查询包含更多过滤子句,涉及数亿行数据,且该问题在MariaDB中并未出现。
MariaDB下的执行结果
MariaDB中,上述两种嵌套子查询的执行计划均正常使用主键索引,性能表现一致,无明显耗时差异。
内容的提问来源于stack exchange,提问作者Jugal Thakkar
相关产品推荐
相关产品推荐

