我正在浏览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 ;
我想知道查询的性能,前提是表中有数十万条记录。它们没有在表中的任何列上创建任何索引。
lat
和lng
列会加快查询执行速度吗?任何输入都会非常受欢迎,因为我正在考虑实现此查询,因为它在我的生产代码中。