mysql left join 特别慢
时间: 2023-09-24 12:13:16 浏览: 100
根据引用中的解释,方案二中的子查询在MySQL中会被自动优化成直接的左连接,因此在执行explain命令时并没有出现差异。然而,在子查询中加入了having子句后,MySQL无法自动优化成直接的左连接,因此按照SQL语句的调用顺序执行,导致explain结果中出现了一个额外的子查询行。这样实现了原本的目的,即从10,000 x 10,000 x 10,000的复杂度降低到10,000 x 10,000的复杂度,从而提升了速度。
根据引用中的方案二的描述,通过将两次左连接合并为一次来减少笛卡尔积的操作,可以显著提升速度。具体的SQL结构如下:
```
select p.id,p.name,pss.sort from table1 p
left join (
select name,sort from table2 ps
left join table2 ps2 on ps.name = ps2.name and ...
where ...
) pss on p.name = pss.name
where ...
order by pss.sort asc,p.sale desc,p.time desc
limit 0,10
```
而引用中提到的第三种解决方案是将SQL语句拆分开来,因为是左连接,关联关系可以分开执行,然后逐个执行,观察执行情况。
因此,根据以上三个引用的内容,可以得出解决MySQL左连接特别慢的三种方法,即通过优化子查询、合并左连接操作和拆分SQL语句来提升速度。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [mysql 优化慢复杂sql (多个left join 数量过大 order by 巨慢)](https://blog.csdn.net/qq_40835969/article/details/128239398)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
- *3* [mysql left join 查询慢的问题排查](https://blog.csdn.net/tianjiliuhen/article/details/127446340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文