MySQL のサブクエリが遅い!!

鉄則

MySQLでは 「IN」 にサブクエリを使わない。
FROM 句に全て並べる!

(例)この商品を買った人はこんな商品も購入しています!

SELECT item_id FROM order
INNER JOIN order_detail ON order.id = order_detail.order_id
WHERE customer_id IN (
SELECT customer_id FROM order_detail

(↑↑クラッシュしたのかとビックリするほど時間がかかります)

INを使わずFROM句で。

SELECT item_id FROM order,order_detail,(
SELECT customer_id FROM order_detail

)  AS tbl1
WHERE order.id = order_detail.order_id
order.customer_id = tbl1.customer_id

(サクサクです)

 

(参考)なぜMySQLのサブクエリは遅いのか。