使用纬度和经度查找最近位置的查询性能

时间:2015-07-06 06:49:50

标签: mysql google-maps

我正在浏览Google上的this文章,提到要查找的查询 使用纬度和经度的最近位置。许多开发人员在各种论坛中都提到了这篇文章和查询:

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

他们的创建表如下所示:

CREATE TABLE `markers` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `name` VARCHAR( 60 ) NOT NULL ,
  `address` VARCHAR( 80 ) NOT NULL ,
  `lat` FLOAT( 10, 6 ) NOT NULL ,
  `lng` FLOAT( 10, 6 ) NOT NULL
) ENGINE = MYISAM ;

我想知道查询的性能,前提是表中有数十万条记录。它们没有在表中的任何列上创建任何索引。

  1. 查询是否会扫描表格中的所有行?
  2. 如果我们索引latlng列会加快查询执行速度吗?
  3. 还有其他方法可以调整此查询吗?
  4. 任何输入都会非常受欢迎,因为我正在考虑实现此查询,因为它在我的生产代码中。

0 个答案:

没有答案