【问题标题】:Whats the equivalent of ST_DWithin (PostGIS - PostgreSQL) for MySQL?什么相当于 MySQL 的 ST_DWithin (PostGIS - PostgreSQL)?
【发布时间】:2019-07-03 13:22:29
【问题描述】:

我正在尝试找到一种有效的方法来进行邻近查询,即返回位于中心 POINT 半径范围内的 POINT。

我了解 PostGIS 的 ST_DWithin 方法是在 PostgreSQL 中执行此操作的好方法,并且它 uses the INDEX

我目前正在使用ST_Distance_Sphere(g1, g2 [, radius]),它返回球体上点之间的最小球面距离,以米为单位。

SELECT placeNames FROM myPlaces
WHERE ST_Distance_Sphere(placeLocation, POINT(28.861105, 77.337)) < 10000

我正在使用WHERE 子句过滤行。查询是否使用索引?如果没有,是否有更好的方法来实现。

我正在使用 MySQL 5.7.26 和 8.0.16,它们都运行默认的 InnoDB 数据库引擎。

【问题讨论】:

  • 使用 EXPLAIN 检查查询的执行方式:dev.mysql.com/doc/refman/5.7/en/using-spatial-indexes.html
  • # id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, Extra ``'1', 'SIMPLE', 'myStoreLocations', NULL, 'ALL', NULL, NULL, NULL, NULL, '2', '100.00', 'Using where'
  • 我觉得这里不用空间索引
  • 我同意。只要执行时间不是“淫秽”的,我就不会再考虑这个问题了。

标签: mysql geospatial postgis


【解决方案1】:

目前,在 MySQL 中,似乎没有比 ST_Distance_Sphere 或任何其他使用空间索引的“更有效”的替代方案。

【讨论】:

    【解决方案2】:

    首先 SRID 设置这个查询 4326 使用它; 样本

    SELECT ST_SetSRID(ST_MakePoint(-71.1043443253471, 42.3150676015829),4326);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2013-10-20
      • 1970-01-01
      • 2012-07-28
      • 2013-11-13
      • 1970-01-01
      相关资源
      最近更新 更多