我有一个数据库,其中有很多汽车的位置(坐标;拉丁美洲,液化天然气)。我想通过给服务器提供坐标来得到汽车的位置,并且很快得到位置。问题是,汽车的数量是众多的,如果一个表中有数百万条记录,那么在使用
select *
from locations
where (lat >= '$lat-10' and lat <= '$lat+10') and
(lng >= '$lng-10' and lng <= '$lng+10')
这可能是正常的,但它比较了数百万个坐标与四个条件,它利用资源非常多。那么有没有什么算法可以很快找到位置呢?我想用正方形把我国的Map分类,并把每一部分放在一个单独的表格里,以便快速找到位置是否是个好主意。因此,如果用户只想通过提供当前坐标来查找汽车的位置,sql将只在用户当前所在的部分(表)中进行搜索。但现在的问题是,表的数量会增加很多,可能会增加10万个表!!
编辑
CREATE TABLE `locations` (
`car_id` int(10) UNSIGNED NOT NULL,
`car_code` varchar(8) COLLATE utf8mb4_unicode_ci NOT NULL,
`lat` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`lng` tinytext COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `locations`
ADD PRIMARY KEY (`car_id`);
或者我应该在sql中使用索引?如果是,我怎么做?这是答案索引吗
如何快速找到汽车的位置?谢谢
1条答案
按热度按时间eoxn13cs1#
确保不需要在数据之间进行无用的转换,所以在表模式和查询中使用相同的数据类型pr lat和lng(如果lat,lng in db为十进制,则不要使用字符串传递vars值。。最后是一个适当的绑定)确保在两个表的表位置上都有复合索引
在“选择”中只选择真正需要的列,然后将这些列添加到复合索引中,例如: