如何改进我的地理位置查询,以免占用 8 分钟的 CPU 时间
Posted
技术标签:
【中文标题】如何改进我的地理位置查询,以免占用 8 分钟的 CPU 时间【英文标题】:How can I improve my geolocation query so not to take 8mins of cpu time 【发布时间】:2014-02-19 18:06:01 【问题描述】:我用php和mysql查询了大约2G的数据,个人账户geogrpahy数据把这个和long和lat相加,然后我用结果发给google到heat map
这需要很长时间......计算最多需要 8 分钟
SELECT SUM(`Geography`.`Orders`)AS `weight`,
`location`.`latitude`,
`location`.`longitude`
FROM `mobile`.`Geography`
INNER JOIN `mobile`.`location` ON (`Geography`.`City` = `location`.`city`)
AND (`Geography`.`Country` = `location`.`country`)
WHERE (`Geography`.`Advertiser ID` = $mid)
GROUP BY `Geography`.`City`;
有没有更好的方法来做到这一点,或者有一个替代方法可以做到这一点? $mid 用于 php 变量替换为帐户信息
【问题讨论】:
你的表被索引了吗? 【参考方案1】:您应该创建以下索引:Geography(AdvertiserId, City, Country, Orders)
和 Location(city, latitude, longitude)
。
【讨论】:
【参考方案2】:尝试以下查询:
select sum(g.Orders) as weight,
(select l.latitude from mobile.location l where
(g.City = l.city) and
(g.Country = l.country) limit 1
) as latitude,
(select l.longitude from mobile.location l where
(g.City = l.city) and
(g.Country = l.country) limit 1
) as longitude
from mobile.Geography g
WHERE (g.Advertiser ID = $mid)
GROUP BY g.City;
【讨论】:
以上是关于如何改进我的地理位置查询,以免占用 8 分钟的 CPU 时间的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中序列化 DataTable 会占用大量内存 - 如何改进这一点