MariaDB 10.3.9 LEFT JOIN执行效率异常,嵌套查询反而更快?
MariaDB 10.3.9嵌套查询反而更优的原因分析
核心结论
这既不是MariaDB的Bug,主要是版本过旧导致优化器能力不足,属于老版本优化器的典型局限。
具体原因拆解
- 老版本优化器的路径选择盲区:MariaDB 10.3.9是2018年的老版本,其查询优化器对「大表JOIN+排序+分页」这类复合场景的处理能力较弱。普通LEFT JOIN写法下,优化器可能错误地选择先执行全表关联,再做过滤、排序和分页——这会导致临时处理的数据量远超实际需要(50万条全量关联后再筛选),自然耗时久。而嵌套查询相当于手动指定了「先过滤、排序、分页缩小log_api数据范围,再关联」的执行顺序,直接避开了优化器的决策失误。
- 常规调优建议的适用前提:所谓「避免嵌套查询」的建议,是建立在数据库优化器足够智能、能自动识别最优执行路径的基础上。但老版本优化器不具备这个能力时,手动用嵌套查询强制合理的执行顺序,反而能获得更好性能,这是合理的变通方案。
后续建议
- 优先升级到MariaDB 10.5及以上版本:新版本优化器在JOIN、子查询的执行计划生成上有大量改进,能自动识别「先缩小数据范围再关联」的最优路径,此时嵌套查询和普通JOIN的性能差距会大幅缩小甚至消失。
- 若暂时无法升级:保留当前嵌套查询写法的同时,检查log_api表中过滤、排序字段是否创建了合适的索引,进一步降低数据扫描开销。
内容的提问来源于stack exchange,提问作者qdongxu
相关产品推荐
相关产品推荐

