php - MySQL Left join 使查询非常慢......我该如何重构?

标签 php mysql

我的 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 JOININNER JOIN(或只是JOIN)

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

The top answer here提供了一个有用的图表来演示这些类型的语句之间的区别。

关于php - MySQL Left join 使查询非常慢......我该如何重构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50205663/

相关文章:

php - 空合并运算符是否调用一个函数两次?

php - css中的化学式

mysql - 无法在使用 Laravel 迁移创建的 PHPMyAdmin 中看到外键

php - mysql_real_escape_string() 不应该在数据库中留下斜杠吗?

mysql - 将一个表连接到另一个表的 MAX 记录

带有多字段主键的MySql问题

php - 在 Android 模拟器或手机上运行时,Ajax 请求无法在 Eclipse 中工作

php - Wordpress 无法生成 .htaccess 文件

php - 单个sql查询多个表

MySQL:将字段复制到另一个表