Mysql 如何通过lat、long查找最近的地址
我已经创建了一个位置表,其中保存了lat、long和location。我的要求是,当我通过lat时,long将获得距离该位置表10英里内的最近位置。位置表结构如下:-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
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)
onFLOAT
。另外(14,12)将把经度削减为100;这可能不是您想要的。MySQL 5.6是否应该支持地理空间数据类型?