gpt4 book ai didi

mysql - 通过表连接优化慢速 Lon/Lat 查询

转载 作者:行者123 更新时间:2023-11-30 01:14:58 25 4
gpt4 key购买 nike

我们正在开发一个现有网站,但无法重新构建数据库以进行更好的优化,因此不幸的是,我们正在运行大量“联接”来链接到每个表。

我们正在链接几个临时存储的邮政编码、用户帐户、体育事件、年龄组等的小表。

我不擅长优化 SQL,但我需要这个查询尽可能快地运行,因为我认为它会导致我们的服务器出现问题,因为它被记录在“慢日志”文件中。基本上,我们将特定用户的经度/纬度存储在表中。然后根据第二个表检查该经度/纬度,该表包含用户及其经度/纬度的列表。然后,记录集根据最近的用户显示结果。不幸的是它有大量的表连接

信息:查询时间:5 锁定时间:0 已发送行数:10 已检查行数:18823691

SELECT *,
( 3959 * acos
( cos
( radians(TableA.user_latitude)
) * cos
( radians( TableB.latitude ) )
* cos( radians( TableB.longitude ) - radians(TableA.user_longitude) ) + sin( radians(TableA.user_latitude) ) * sin( radians( TableB.latitude ) ) ) )

AS distance FROM
(
(
(
(
TableC JOIN TableD on TableC.activity_sport = TableD.sport_ID
)
JOIN TableA on TableC.activity_UserID = TableA.user_ID
)
LEFT JOIN TableE on TableE.TSageCatID = TableA.user_age
)
JOIN TableB on TableB.postcode = 'SE1 7PB'
)

LEFT JOIN TableF on TableF.log_UserID = TableA.user_ID
WHERE TableA.user_age LIKE '%'
AND TableA.user_gender LIKE '%'
AND TableC.activity_sport LIKE '63'
AND TableC.activity_level LIKE '%'
AND TableA.valid = 1
AND TableA.user_ID != '-1'
AND TableA.user_Level = 'partner'

GROUP BY user_email
HAVING DISTANCE < 50
ORDER BY distance ASC
LIMIT 120, 10;

最佳答案

您可以将点分类到存储桶中并搜索您所在位置周围的附近点。您可以在 @ phpclasses.org 下载我的 php 类 hilbert-curve。它使用四键和墨卡托投影。

关于mysql - 通过表连接优化慢速 Lon/Lat 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19157471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com