首页 > 解决方案 > MySQL左连接使查询非常慢......我该如何重构?

问题描述

我有运行如下 MYSQL 查询的 PHP 系统

select
order.id,
order.name,
order.date,
customer.name,
items.coupon_code,
from order
left join customer on order.custid = customer.id
left join items on items.coupon_code = order.coupon_code
where items.coupon_new_code is null
and order.status = 1000
AND order.promo_code in (1,2)

order 表有 800k 条记录,items 表有 300k 条记录。当我运行此查询时,大约需要 9 个小时才能完成!

如果我将左连接注释到 items 表,那么查询将在几秒钟内运行!我对 MySQL 连接的效率不是很高,如果有人能告诉我如何优化此查询以在可接受的时间范围内运行,我将非常感激。

标签: phpmysql

解决方案


尝试改变

LEFT JOININNER JOIN(或只是JOIN

假设您只想查看同时具有客户和与之关联的商品的订单,这将有助于加快处理速度。当前,您的查询正在尝试从order表中返回所有数据,但这不是必需的。对数据库结构的其他更改也可能会有所改善。

这里的最佳答案提供了一个有用的图表,演示了这些类型的语句之间的区别。


推荐阅读