【发布时间】:2014-03-22 09:29:37
【问题描述】:
因此,我目前正在尝试从我们拥有的大约 34000 条记录中获取一些地理数据。
我们存储了 Person 的记录,其中包括名字、姓氏、地址和邮政编码等基本信息。
我想获取有关邮政编码的信息,并将其与他们的经度和纬度坐标联系起来。 为此,我还有一张带有澳大利亚邮政编码及其长/纬度坐标的表格。
SELECT count(p.postcode) AS `count`, p.postcode, pctlt.Lat, pctlt.`Long`
FROM person AS p
INNER JOIN pcodetolonglat AS pctlt ON pctlt.Pcode = p.postcode
WHERE length(p.postcode)=4
GROUP BY p.postcode
目前,此脚本需要一两分钟才能运行,
有没有更有效的方法来获得相同的结果?
【问题讨论】:
-
因为我想计算一个邮政编码中“居住”的“人”的数量,并且我想知道每个邮政编码的“经纬度”坐标例如:68 条记录邮政编码 2148,纬度:-33.78 长:150.87
-
我正在考虑首先在 Person 表中获取邮政编码计数的结果,例如“select count(*) 'count, postcode from person group by postcode”,然后将结果加入 pcodetolonglat 表以获得 lat并且很长。
-
您在
Pcode和postcode上有索引吗? -
哪个表更大,
person还是pcodetolonglat?如果person更大,那么WHERE length(pctlt.postcode) = 4可能会有所帮助。 -
postcode 有 person_id 引用,Pcode 没有,Person 有大约 35k 条记录,大约 20 列,pcodetolonglat 有 16.7k 和 12 列。我对人员邮政编码进行长度操作的原因是因为存储的数据不是 100% 一致的,而且我不想要不是邮政编码的信息。 (还有一些邮政编码似乎是外国的或根本不是邮政编码)
标签: mysql count inner-join large-data-volumes