Mysql 如何通过lat、long查找最近的地址

Mysql 如何通过lat、long查找最近的地址,mysql,distance,latitude-longitude,Mysql,Distance,Latitude Longitude,我已经创建了一个位置表,其中保存了lat、long和location。我的要求是,当我通过lat时,long将获得距离该位置表10英里内的最近位置。位置表结构如下:- CREATE TABLE IF NOT EXISTS `locations` ( `latitude` float(14,12) unsigned NOT NULL, `longitude` float(14,12) unsigned NOT NULL, `location` varchar(150) NOT NULL

我已经创建了一个位置表,其中保存了lat、long和location。我的要求是,当我通过lat时,long将获得距离该位置表10英里内的最近位置。位置表结构如下:-

CREATE TABLE IF NOT EXISTS `locations` (
  `latitude` float(14,12) unsigned NOT NULL,
  `longitude` float(14,12) unsigned NOT NULL,
  `location` varchar(150) NOT NULL,
  PRIMARY KEY (`latitude`,`longitude`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
及 我的问题是:-

  SELECT 
    (3959 * ACOS(COS(RADIANS(lat)) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS(long)) + SIN(RADIANS(lat)) * SIN(RADIANS(latitude)))) AS distance,
    location
FROM
    locations
HAVING distance < 10
ORDER BY distance
LIMIT 0 , 1
选择
(3959*ACOS(弧度(纬度))*COS(弧度(纬度))*COS(弧度(经度)-弧度(长))+SIN(弧度(纬度))*SIN(弧度(纬度)))作为距离,
位置
从…起
位置
距离小于10的
按距离排序
限制0,1
我使用的是MySql 5.6。 位置表中大约有39000个数据。 执行此查询需要5到6秒的时间

有谁能帮我缩短执行时间吗


谢谢

MySQL支持-这些都经过优化,比通过整数和几何函数进行优化要快得多。网上有很多教程,非常好

虽然它似乎有更多的代码,但我怀疑“WHERE(3959等…”会明显更快。而且地址真的不可能在阿拉斯加州的安克雷奇吗?这是一个棘手的问题。但是代码会更快。但它需要对您的模式进行重大更改。不要使用
(M,N)
on
FLOAT
。另外(14,12)将把经度削减为100;这可能不是您想要的。MySQL 5.6是否应该支持地理空间数据类型?