mysql - 计算字段的优化排序
问题描述
有桌子users
和address
。第二个表具有几何geo
类型的列。在搜索用户的过程中,在服务器上发送当前坐标,并通过这样的 sql 请求计算距离:
SELECT
FLOOR(ST_Distance_Sphere(point(lng, lat), `geo`)) as distance
FROM
address
WHERE
condition
它运作良好,但我也需要按此字段排序,这需要很多时间。有人可以建议如何优化它吗?
MYSQL 5.7
解决方案
经典问题。没有快速的解决方案。所有解决方案都涉及向 中添加“边界框” WHERE
,以及一些使用该边界框的索引。这是我关于这个问题的“论文”,以及详细的解决方案:http: //mysql.rjweb.org/doc.php/find_nearest_in_mysql
我假设小时“条件”包括
WHERE distance < 100
或者
ORDER BY distance LIMIT 10
推荐阅读
- mongodb - NestJs / Mongoose 在 Docker 撰写时无法建立 MongoDB 数据库连接
- vagrant - 我只能在运行`vagrant destroy`然后`vagrant up`时更新我的Vagrantfile
- python - 用Python获取连接接口的网络地址
- angular - ngx-mask - 简单的十进制掩码不起作用
- css - 如何更改应用程序中的Firefox图标(css)
- onelogin - One Login Open ID Connect 工作流程,如何启用 Duo Security MFA
- google-cloud-platform - Cloud Run 和 Cloud SQL 之间的连接数是否有限制?
- python - 使用单个类作为上下文管理器和装饰器是否令人不悦?
- angular - Firestore使用角度获取根集合的所有子集合
- arrays - 普通数组上的 Haskell 快速排序 - 可能吗?