私は私に同じ結果を与える2人のSQLの持っている:サブクエリ対結合とどこが速いのですか?
クエリ1:
SELECT
u.*, COUNT(po.order_id) products_count
FROM (SELECT * FROM orders o WHERE o.date >= (CURRENT_DATE() - INTERVAL 1 MONTH)) o
LEFT JOIN products_orders po ON po.order_id=o.id
JOIN users u ON u.id=o.user_id
GROUP BY po.order_id
とクエリ2:
SELECT
u.*, o.id order_id, COUNT(po.order_id) products_count
FROM users u
JOIN orders o ON o.user_id=u.id
LEFT JOIN products_orders po ON po.order_id=o.id
WHERE o.date >= (CURRENT_DATE() - INTERVAL 1 MONTH)
GROUP BY po.order_id
を、私は1つが速くなるべき...だろうか? クエリの説明では、それらが等しいと表示されます...あなたはどう思いますか?必要がないので、
説明プランが同じ場合、パフォーマンスは同じにする必要があります。留意してくださいコストベースのオプティマイザは、SQLで "フィドル"して、可能な限り最良の結果を得ることができます(少なくとも正確性とパフォーマンスの点で最も良いと思うもの) – xQbert
クロスポストしないでください:https:// dba .stackexchange.com/questions/179878/subquery-vs-join-and-where-which-one-is-faster –
投票のために投票されました – breq