【发布时间】:2015-07-15 15:44:49
【问题描述】:
我正在尝试使用 mysql 从给定的纬度和经度实现“查找最近的位置”。我的 wordpress 网站中存储了 8000 个位置。
我设法写了这个:
SELECT
b.ID,
SQRT( POW(69.1 * (b.latitude - 51.5073509), 2) + POW(69.1 * (-0.1277583 - b.longitude) * COS(b.latitude / 57.3), 2)) AS distance
FROM
wp_posts a
LEFT JOIN
(
SELECT
post_id AS ID,
MAX(CASE WHEN meta_key = 'theme_directory_map_latitude' THEN meta_value ELSE NULL END) AS latitude,
MAX(CASE WHEN meta_key = 'theme_directory_map_longitude' THEN meta_value ELSE NULL END) AS longitude
FROM
wp_postmeta
WHERE
meta_key = 'theme_directory_map_latitude' OR meta_key = 'theme_directory_map_longitude'
GROUP BY
post_id
) b ON a.ID = b.ID
WHERE
a.post_type = 'directory'
HAVING
distance < 30
ORDER BY
distance
上面的脚本可以满足我的需要,但是在我的 weordpress 网站上处理它需要很长时间,有时我什至会出现超时错误。
有没有什么地方可以优化上面的代码,让它运行得更快?
【问题讨论】:
-
索引,反向查询,不使用wordpress?这更适合codereview.stackexchange.com
-
这个问题可能适合Code Review,只要 (a) 您的代码按预期工作,(b) 您的代码是真实代码,而不是示例代码,并且 (c) 您的代码包含在问题的正文中。如果您希望通过同行评审来改进代码的各个方面,请将其发布在 Code Review 上。
标签: php mysql wordpress query-optimization