专家,
我需要MySQL查询的帮助。它涉及两个表:' usedcars'和'县'。
' usedcars':1600多万条记录,
'县':3100条记录
我的查询需要分钟才能完成。它很难排除故障,因为MySQL会缓存结果,因此当我重新运行相同的查询时,它会在一秒钟内出现!
我确定子查询正在杀死我,所以我可以使用一些提示替代。
以下是一个示例:
SELECT p.make,p.total,sum(p.total) AS theCount,
sum(p.total)/
(SELECT sum(p.total) AS theCount FROM usedcars p, counties c
WHERE c.FIPS IN (55009,55061,55083) AND c.statecounty = p.statecounty) AS MktPerc
FROM usedcars p, counties c
WHERE c.FIPS IN (55009,55061,55083)
AND c.statecounty = p.statecounty
GROUP BY make
ORDER BY theCount DESC
我正在寻找在特定县(FIPS)按品牌销售的汽车数量以及同一品牌中该品牌的市场份额(mktPerc)。
市场份额:按品牌销售的汽车数量/按所有品牌销售的汽车数量
这里是EXPLAIN:
以下是返回示例。它给了我我想要的东西。只需要太长时间!
答案 0 :(得分:0)
我会简化以下内容。
SELECT
p.make,
SUM( p.total ) SumTotal,
AVG( p.total ) AvgTotal,
AllBrands.TotalAllBrands,
SUM( p.total ) / AllBrands.TotalAllBrands as MtkPcnt
from
counties c
JOIN usedCars p
ON c.statecounty = p.statecounty,
( SELECT
SUM( p.total ) TotalAllBrands
from
counties c
JOIN usedCars p
ON c.statecounty = p.statecounty,
where
c.FIPS in ( 55009,55061,55083 ) ) AllBrands
where
c.FIPS in ( 55009,55061,55083 ) )
group by
p.make
order by
sum( p.total ) desc
为了帮助优化,我会通过
覆盖索引table index
counties ( FIPS, StateCounty )
usedCars ( stateCounty, make, total )
答案 1 :(得分:0)
确保您拥有以下索引:
usedcars - >州/县
国家 - > (FIPS,statecounty)
使用以下查询:
ALTER TABLE usedcars ADD INDEX usedcar_index (statecounty);
ALTER TABLE countries ADD INDEX country_index (FIPS, statecounty);