我创建了一个位置表,其中保存了lat,long和location。我的要求是当我通过一个纬度很长的时候,将获得离该位置表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
我正在使用MySql 5.6。 位置表中有大约39,000个数据。 执行此查询时,需要5到6秒。
有人可以帮忙我怎样才能减少执行时间?
谢谢!
答案 0 :(得分:0)
MySQL支持geospatial datatypes and functions - 这些都是通过整数和几何函数优化并且快得多。网上有很多教程 - this one非常好。