繁体   English   中英

重写MySQL子查询作为联接

[英]Rewriting MySQL subquery to be a join

我的表有很多行,执行子查询的效率很低。 为了节省时间,我无法全神贯注于如何对数据进行联接。

这是我所拥有的: http : //sqlfiddle.com/#!2/6ab0c/3/0

这有一段评论的时间。

首先,我认为您在子查询中缺少ORDER BY 我怀疑您想order by I2.date以获取“下一个”行。

其次,MySQL并未完全提供您需要的功能。 您可以使用变量重写查询。 但是,由于您没有描述它在做什么,因此很难确保重写是正确的。 这是加快查询速度的一种方法。

第三,此查询使用items(location, sku, date)的索引会更快,并且可能足够快。 该索引可能就是您所需要的。

SELECT I1.*, MIN(I2.exit_date)
FROM Items I1

LEFT JOIN (
  SELECT date as exit_date, location, sku 
  FROM Items
  ORDER BY date asc
) as I2
ON I2.exit_date > I1.date
  AND I2.location = I1.location
  AND I2.sku = I1.sku 
GROUP BY I1.id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM