請參閱下面我想要優化的mysql查詢。我確信有這樣做的更有效的方式,但我只是不能爲我的生活工作。有人可以幫忙嗎?我認爲必須有一種方法來防止每個組的多個內部聯接。SQL查詢 - 計數組非常慢 - 幫助優化
SELECT network_name, count(*) as phone_count from
deals_temp d
INNER JOIN phones p ON d.model_id = p.model_id
INNER JOIN tariffs t ON d.tariff_id = t.tariff_id
INNER JOIN networks n ON d.network_id = n.network_id
INNER JOIN free_gift fg ON d.freegift_id = fg.freegift_id
INNER JOIN merchants m ON d.merchant_id = m.merchant_id
INNER JOIN type ty ON ty.type_id = d.type_id
WHERE network_name != '' GROUP BY network_name UNION ALL
SELECT tariff_contractlength, count(*) as phone_count from
deals_temp d
INNER JOIN phones p ON d.model_id = p.model_id
INNER JOIN tariffs t ON d.tariff_id = t.tariff_id
INNER JOIN networks n ON d.network_id = n.network_id
INNER JOIN free_gift fg ON d.freegift_id = fg.freegift_id
INNER JOIN merchants m ON d.merchant_id = m.merchant_id
INNER JOIN type ty ON ty.type_id = d.type_id
WHERE tariff_contractlength != 1 GROUP BY tariff_contractlength UNION ALL
SELECT offer_freegift, count(*) as phone_count from deals_temp d
INNER JOIN phones p ON d.model_id = p.model_id
INNER JOIN tariffs t ON d.tariff_id = t.tariff_id
INNER JOIN networks n ON d.network_id = n.network_id
INNER JOIN free_gift fg ON d.freegift_id = fg.freegift_id
INNER JOIN merchants m ON d.merchant_id = m.merchant_id
INNER JOIN type ty ON ty.type_id = d.type_id
WHERE offer_freegift != '' GROUP BY offer_freegift
好吧我會解釋一些,簡單地說。我認爲這可能很快。
所以,我有以下表
deals_temp
MODEL_ID | tariff_id |
123 | 1234
123 | 1235
123 | 1236
124 | 1237
手機
MODEL_ID | model_make | model_basename
123 | Apple | iPhone
124 | Apple | iPad的
關稅
tariff_id |資料名稱
1234 |無限30
我需要根據其他表中的不同值計算deals_temp中的交易數(行數),例如,電話(model_make)和資費(tariff_name)
輸出應爲:
元件|計數
iPhone | 123
iPad | 543
Apple | 453
無限30 | 564
你爲什麼要數(*)?你不能只計算每行的唯一ID嗎? – Morgan
就像我們知道你有什麼數據,什麼表結構和預期輸出一樣。您認爲我們應該如何幫助您提供您提供的信息? –
非常好,由@juergend +1表示。 – Rahul