在我的應用程序中,我有兩個MySQL表,'units'和'impressions'相對於許多關係。我需要從單位表中獲取所有廣告單元的列表,同時獲取每個廣告單元的展示次數。MySQL:在列表中使用GROUP BY和子查詢
我有兩個SELECT查詢做這個任務(簡化這個例子),先用子選擇:
SELECT
(SELECT COUNT(*) FROM impressions WHERE impression_unit_id = unit_id) AS impressions_count,
unit_id
FROM units;
和第二使用GROUP BY:
SELECT
COUNT(impression_id) AS impressions_count,
unit_id
FROM units
LEFT JOIN impressions ON impression_unit_id = unit_id
GROUP BY unit_id;
子選擇查詢爲每個記錄(廣告單元)運行,因此GROUP BY看起來更聰明,但它有一個JOIN更多。哪一個更喜歡錶現?
嘗試一下,看看它們是如何執行的......我期望數據庫能爲這兩個查詢提出相同的執行計劃,所以我期望它們在性能方面是相同的。 。但是,爲了美觀的原因,我會重新編寫第二個查詢來使用「left join」而不是「right join」。 –
Michael你是對的我編輯過使用LEFT JOIN指出「主」表。 – Marko