gpt4 book ai didi

mysql - ST_CONTAINS 性能低下

转载 作者:行者123 更新时间:2023-11-29 02:45:01 31 4
gpt4 key购买 nike

我有一个简单的带有 JOIN 的 sql 查询,如果点在多边形中则连接:

SELECT `oktmo_geometry`.`oktmo` FROM `place`
INNER JOIN `oktmo_geometry` ON ST_CONTAINS(`oktmo_geometry`.`geometry`, Point(`place`.lng, `place`.lat))

但是那个查询很慢。我有 12k 个地方和 300 个几何图形。仅 50 个位置需要 3-5 秒(取决于 MySQL 的版本)。我曾尝试使用 MariaDB,它比 MySQL 快约 50 倍,但我认为仍然很慢。

也许我的查询有问题或其他什么?

oktmo_geometrygeometry 是多面体类型。

最佳答案

你的速度的很大一部分在这里丢失了:点(`place`.lng,`place`.lat)

这不能被索引,所以原则上它必须遍历每个 `place` 行来完成搜索。

更好的解决方案是创建一个像 `place`.pointvalue 这样的新列,它是从 Point(`place`.lng, `place`.lat), 然后索引`place`.pointvalue.

那么你的查询看起来像

SELECT `mo_geometry`.`oktmo` FROM `place`
INNER JOIN `oktmo_geometry` ON ST_CONTAINS(`oktmo_geometry`.`geometry`, `place`.pointvalue)

我怀疑会快很多。

关于mysql - ST_CONTAINS 性能低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43977969/

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