Mysql Laravel联接表和按和分组查询太慢
我正在使用Laravel查询生成器从数据库中获取所需的结果。下面的查询是否工作正常,但需要花费太多时间才能获得结果。你能帮我做这个吗Mysql Laravel联接表和按和分组查询太慢,mysql,laravel,Mysql,Laravel,我正在使用Laravel查询生成器从数据库中获取所需的结果。下面的查询是否工作正常,但需要花费太多时间才能获得结果。你能帮我做这个吗 选择 `amz_广告和sp_活动`.*, 订单7d的总和(属性监督7d), 订单30d的总和(属性监督30d), 金额(归属销售7d)为销售7d, 金额(归属于销售30D)为销售30D, 将(印象)相加为印象, 按点击次数求和(点击次数), 作为成本的总和(成本), 总和(attributedConversions7d)作为attributedConversion
选择
`amz_广告和sp_活动`.*,
订单7d的总和(属性监督7d),
订单30d的总和(属性监督30d),
金额(归属销售7d)为销售7d,
金额(归属于销售30D)为销售30D,
将(印象)相加为印象,
按点击次数求和(点击次数),
作为成本的总和(成本),
总和(attributedConversions7d)作为attributedConversions7d,
总和(attributedConversions30d)为attributedConversions30d
从…起
`amz_广告_sp_产品_目标`
“amz_ads_sp_product_targetings”上的内部联接“amz_ads_sp_report_product_targetings”。`campaignId`=`amz_ads_sp_report_product_targetings`.`campaignId`
在“amz_ads_sp_report_product_targetings”上内部加入“amz_ads_sp_活动”。“活动ID”=“amz_ads_sp_活动”。“活动ID”
哪里
(
`amz_ads_sp_product_targetings`.`user_id`=?
和'amz_ads_sp_product_targetings'。'profileId`=?
)
分组
`amz_广告_sp_产品_目标`.`活动ID`
解释SQL的结果
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE amz_ads_sp_report_product_targetings ALL campaignId NULL NULL NULL 50061 Using temporary; Using filesort
1 SIMPLE amz_ads_sp_campaigns ref campaignId campaignId 8 pr-amz-ppc.amz_ads_sp_report_product_targetings.ca... 1
1 SIMPLE amz_ads_sp_product_targetings ref campaignId campaignId 8 pr-amz-ppc.amz_ads_sp_report_product_targetings.ca... 33 Using where
您的查询可以从几个索引中受益,这些索引包括
WHERE
子句以及连接条件:
CREATE INDEX idx1 ON amz_ads_sp_product_targetings (
user_id, profileId, campaignId);
CREATE INDEX idx2 ON amz_ads_sp_report_product_targetings (
campaignId);
CREATE INDEX idx3 ON amz_ads_sp_campaigns (campaignId);
第一个索引idx1
覆盖了整个WHERE
子句,这可能会让MySQL在amz\u ads\u sp\u product\u targetings
表的初始扫描中丢弃许多记录。它还包括第一次加入所需的活动ID
列。第二个和第三个索引涵盖每个表的联接列。这可能会让MySQL在加入过程中进行更快速的查找
请注意,除非该表的
活动ID
是主键,否则选择amz\u ads\u sp\u活动。*
无效。此外,我们也无法做更多的事情来加快查询速度,因为SUM
从本质上讲,需要触摸每条记录才能得出结果和。大概您有一个复合键(user\u id,profileId)?