在按经纬度的方格搜索时,你能帮我加快选择速度吗?

问题描述 投票:0回答:1

有一个这样的请求:

SELECT * 
FROM `pet` 
WHERE (`unite_id` IS NULL) 
AND ((`status`=1) OR ((`status`=4) AND (`delete_reason` IN (1, 2, 5))))
AND ((`pet`.`latitude` BETWEEN '55.750958149654984' AND '55.76893750736974') AND (`pet`.`longitude` BETWEEN '37.416257858276374' AND '37.432994842529304')) 
ORDER BY `premium_on` DESC, `date` DESC, `created_at` DESC LIMIT 100;

查询时间:2.921469锁定时间:0.000001发送的行数:28检查的行数:656110受影响的行数:0发送的字节数:46395

解释:

id 选择类型 桌子 分区 类型 可能的键 key_len 参考 过滤 额外
1 简单 宠物 \N 索引 状态,idx_pet_geo_opt,idx_pet_geo 高级版 12 \N 101 0,12 使用地点;向后索引扫描

索引

premium_on
来自 3 个字段:premium_on、date、created_at。

我可以做什么来加速这个查询?我对按纬度和经度的正方形搜索特别感兴趣

mysql mariadb
1个回答
0
投票

尝试按如下方式创建复合索引:

ALTER TABLE pet ADD INDEX box (status, unite_id, latitude);

这应该足以支持您的查询,以便对您的

latitude
列进行范围扫描。您仍然应该看看查询计划。

© www.soinside.com 2019 - 2024. All rights reserved.