我有一个MySQL数据库。我将住宅存储在数据库中,对该数据库执行了仅1个查询,但我需要此查询能够超快速地执行,即返回所有在一个正方形地理纬度和经度框内的住宅。
SELECT * FROM homes
WHERE geolat BETWEEN ??? AND ???
AND geolng BETWEEN ??? AND ???
我应该如何存储我的地理数据,以便可以在最短时间内执行此查询并显示所有位于地理位置框内的住宅?
基本上:
- 我是否正在使用最佳SQL语句以最快速度执行此查询?
- 是否存在任何其他方法,甚至不使用数据库,让我以最快的方式查询位于框定地理位置范围内的住宅结果?
如果有帮助的话,我在下面包含了我的数据库表模式:
CREATE TABLE IF NOT EXISTS `homes` (
`home_id` int(10) unsigned NOT NULL auto_increment,
`address` varchar(128) collate utf8_unicode_ci NOT NULL,
`city` varchar(64) collate utf8_unicode_ci NOT NULL,
`state` varchar(2) collate utf8_unicode_ci NOT NULL,
`zip` mediumint(8) unsigned NOT NULL,
`price` mediumint(8) unsigned NOT NULL,
`sqft` smallint(5) unsigned NOT NULL,
`year_built` smallint(5) unsigned NOT NULL,
`geolat` decimal(10,6) default NULL,
`geolng` decimal(10,6) default NULL,
PRIMARY KEY (`home_id`),
KEY `geolat` (`geolat`),
KEY `geolng` (`geolng`),
) ENGINE=InnoDB ;
更新
我知道空间数据会考虑到地球的曲率,但我最关心的是返回最快的地理数据。除非这些空间数据库包可以更快地返回数据,请不要推荐空间扩展。谢谢。
更新2
请注意,下面没有人真正回答了我的问题。我非常期待任何帮助。提前感谢。