请参阅下面我想要优化的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