如何改进我的地理位置查询,以免占用 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 【问题描述】:

我用phpmysql查询了大约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 会占用大量内存 - 如何改进这一点

如何将查询结果导出到 Windows 机器 MySQL 8.0 中的 csv?

如何保存文件以免被删除——就像小塔

带有 c 模块的 Python 的性能

MySql 选择日期相差 30 分钟的行

NSmutableArray 的实现原理机制