php - 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 连接的效率不是很高,如果有人能告诉我如何优化此查询以在可接受的时间范围内运行,我将非常感激。
解决方案
尝试改变
LEFT JOIN
到INNER JOIN
(或只是JOIN
)
假设您只想查看同时具有客户和与之关联的商品的订单,这将有助于加快处理速度。当前,您的查询正在尝试从order
表中返回所有数据,但这不是必需的。对数据库结构的其他更改也可能会有所改善。
这里的最佳答案提供了一个有用的图表,演示了这些类型的语句之间的区别。
推荐阅读
- c# - 如何将条目添加到 IIS 虚拟目录的配置
- xml - 使用 XPath 更新 Android Manifest 中的 versionCode
- javascript - 我可以使用函数更改输入标签的最大属性吗?
- php - 为什么我的 sql select 语句在数据库中选择多行时返回空值?
- wpf - 如果我的 ObservableCollection 在构造时未初始化,为什么它不会在更改时更新 UI?
- python - 运行时保存 TensorFlow 状态(权重)
- facebook - 如何根据 created_date 从 Facebook Graph API 过滤潜在客户
- android - 如何从kotlin中的构造函数传递值获取数据
- python - 如何包装某些句子在从段落中提取它们之后标记,同时为最终输出保持相同的段落格式?
- c# - 来自与子查询的 C# LINQ 复合