首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ST_CONTAINS时性能缓慢

使用ST_CONTAINS时性能缓慢
EN

Stack Overflow用户
提问于 2017-05-15 19:10:33
回答 1查看 1.5K关注 0票数 2

我有一个简单的sql查询,它连接了多多边形中的if点:

代码语言:javascript
复制
SELECT `oktmo_geometry`.`oktmo` FROM `place`
INNER JOIN `oktmo_geometry` ON ST_CONTAINS(`oktmo_geometry`.`geometry`, Point(`place`.lng, `place`.lat))

但是这个查询非常慢。我有12000个位置和300个几何图形。对于只有50个地方,它需要3-5秒(取决于版本MySQL)。我曾经尝试过使用MariaDB,它比MySQL快了大约50倍,但我认为仍然很慢。

也许我的查询出了什么问题或者其他什么问题?

oktmo_geometrygeometry为多多边形类型。

EN

回答 1

Stack Overflow用户

发布于 2018-03-04 03:57:51

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

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

更好的解决方案是创建一个新列,如`place`.pointvalue,它是从Point(`place`.lng`place`.lat)派生的点数据类型,然后索引`place`.pointvalue

那么您的查询将如下所示

代码语言:javascript
复制
SELECT `mo_geometry`.`oktmo` FROM `place`
INNER JOIN `oktmo_geometry` ON ST_CONTAINS(`oktmo_geometry`.`geometry`, `place`.pointvalue)

我怀疑这会快得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43977969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档