join内关联增加条件后查询速度变慢

Viewed 70

image.png
image.png
2.1.5版本WHERE 后增加条件指定config_id后查询速度变慢,由400ms变为2s4,
执行计划由
image.png
变为
image.png
这个是什么原因导致的速度变慢的

3 Answers

【问题状态】已经定位
【问题处理】处理结果见minghong用户的答案

这是join reorder的问题
因为增加了一个过滤条件,table 输出的估算行数发生了变化,导致选择了另一个join order。
我们需要 explain memo plan + sql 的输出信息来分析join order发生变化的原因

查看了统计信息 Config_id 的ndv = 20472(config_id 字段有20472 个不同的值),scene_service 表有 77888 行数据。基于均匀假设我们估算 过滤后的行数为 77888/20472 约为 3 行。其它表和它join 可以过滤掉很多数据(因为scen_service 被过滤掉很多行,所以它再和其它表join时,会导致其他表能匹配上的行数变少),于是选择scene_service 表优先做join。

但事实上 scen_service 表过滤后行数远大于3行,使得后续的join 实际执行时间大于估算的时间。

可以试一试,config_id 取其它值,这个plan执行的时间可以缩短很多