簡體   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