首页 > 解决方案 > 计算字段的优化排序

问题描述

有桌子usersaddress。第二个表具有几何geo类型的列。在搜索用户的过程中,在服务器上发送当前坐标,并通过这样的 sql 请求计算距离:

SELECT 
   FLOOR(ST_Distance_Sphere(point(lng, lat), `geo`)) as distance 
FROM 
  address 
WHERE
  condition 

它运作良好,但我也需要按此字段排序,这需要很多时间。有人可以建议如何优化它吗?

MYSQL 5.7

标签: mysqlsql

解决方案


经典问题。没有快速的解决方案。所有解决方案都涉及向 中添加“边界框” WHERE,以及一些使用该边界框的索引。这是我关于这个问题的“论文”,以及详细的解决方案:http: //mysql.rjweb.org/doc.php/find_nearest_in_mysql

我假设小时“条件”包括

WHERE distance < 100

或者

ORDER BY distance LIMIT 10

推荐阅读