[英]MySQL Left join makes query very slow…how can I refactor?
我有運行如下所示的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)
訂單表有80萬條記錄,項目表有30萬條記錄。 當我運行此查詢大約需要9個小時才能完成!
如果我在項目表中評論左聯接,那么查詢將在幾秒鍾內運行! 我對MySQL聯接的效率不是很高,如果有人能告訴我如何優化此查詢以使其在可接受的時間范圍內運行,我將非常感謝。
嘗試改變
LEFT JOIN
到內INNER JOIN
(或僅JOIN
)
假設您只想查看同時具有客戶和商品的訂單,這將加快處理速度。 當前,您的查詢正在嘗試返回order
表中的所有數據,但這不是必需的。 數據庫結構的其他更改也可能會改善情況。
此處的最高答案提供了一個有用的圖表,該圖表演示了這些類型的語句之間的區別。
至少在order
表和items
表上都需要在coupon_code
上建立索引。 也可考慮增加一個復合索引,要加入對其他領域的custid
,以及對你的WHERE
條件items.coupon_new_code
, order.status
和order.promo_code
。 幾乎不了解您的數據,我只能推測dbms將使用什么。 在復合鍵中嘗試各種組合,然后運行解釋以查看正在使用的鍵。 這實際上取決於列中數據的特殊性。
將EXPLAIN
的輸出與表的模式一起發布將有助於我們改善這些答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.