我的 PHP 系统运行如下所示的 MYSQL 查询
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 连接的效率不是很高,如果有人能告诉我如何优化此查询以在可接受的时间范围内运行,我将不胜感激。
最佳答案
尝试改变
LEFT JOIN
到 INNER JOIN
(或只是JOIN
)
假设您只想查看与客户和商品相关联的订单,这将有助于加快处理速度。目前您的查询正试图从 order
表中返回所有数据,但这不是必需的。数据库结构的其他更改也可能会有所改善。
The top answer here提供了一个有用的图表来演示这些类型的语句之间的区别。
关于php - MySQL Left join 使查询非常慢......我该如何重构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50205663/