【问题标题】:MySql search efficiencyMySql 搜索效率
【发布时间】: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并且很长。
  • 您在Pcodepostcode 上有索引吗?
  • 哪个表更大,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


【解决方案1】:

这是您的查询:

SELECT count(p.postcode) AS `count`, p.postcode, pctlt.Lat, pctlt.`Long`
FROM person p INNER JOIN
     pcodetolonglat pctlt
     ON pctlt.Pcode = p.postcode
WHERE length(p.postcode) = 4
GROUP BY p.postcode;

您不能对这个查询的索引做太多事情。 person(postcode) 上的索引应该会有所帮助。这是首先要尝试的。以下是您的查询的重写,它消除了外部聚合,将其替换为子查询:

SELECT pctlt.Pcode, pctlt.Lat, pctlt.`Long`,
       (select count(*) from person p where pctlt.Pcode = p.postcode) as `count`
FROM pcodetolonglat pctlt 
WHERE length(pctlt.Pcode) = 4 and
      exists (select 1 from person p where pctlt.Pcode = p.postcode);

exists 子句是模仿inner join 的效果。

使用person(postcode) 上的索引,此查询可能比原始查询运行得更快。我不喜欢用相关子查询替换 group by,但在 MySQL 中它有时具有更好的性能。

【讨论】:

  • 您的解决方案要快得多,但是使用 16k 不同的邮政编码,这给了我大约 15k 无用的结果,因为我也需要将此查询的结果输入另一个算法,我只想要计数至少为 1 的结果。
  • 感谢您的更新。我了解如何使用索引因此会更加有益,并且在此线程之后,我相信对 35k 记录进行轻微重组和清理将是参考邮政编码 id 而不是邮政编码,它们自己将是一个更有效的过程.
猜你喜欢
  • 2011-02-26
  • 2012-02-13
  • 2012-05-18
  • 2019-12-20
  • 2012-08-01
  • 2019-02-27
  • 2011-10-21
  • 1970-01-01
  • 2017-05-13
相关资源
最近更新 更多