这听起来像是许多其他人发布的问题,但有一个我无法弄清楚的细微差别:在询问最近的 X 数据点时,我不想限制我的界限,并且查询需要快速.
现在我使用 SQL 如下:
SELECT * FROM myTable WHERE col1 = 'String' AND col2 = 1
ORDER BY (latCol - <suppliedLat>) + (longCol - <suppliedLong>)
LIMIT X; //X is usually lower than 100
将 Lat 和 Long 存储为双精度,并且表包含大约一百万行,这个查询在我们的服务器上需要大约 6 秒 - 不够快。EXPLAIN SELECT 告诉我它没有使用索引(正如预期的那样 - 只有一个索引并且它与位置无关),执行文件排序,并命中所有约 100 万行。
删除两个 WHERE 子句根本不会提高性能,我们应用于 col1、col2 和第三个 col 的一个索引实际上降低了该查询的性能,尽管大大提高了其他查询的速度。
我对如何解决这个问题的阅读使我相信空间索引是要走的路,但我们从不打算使用任何更高级的空间特征,如多边形和圆形边界,我们只需要速度。是否有一种简单的方法可以将空间(或其他类型)索引应用于已经存在的十进制度表以提高上述查询的速度?有没有更好的方法来编写查询以提高效率?
最大的杀手是,我读到的关于在 MySQL 中实现空间索引的大多数内容似乎都需要更改插入数据的方式,但是修改我们的 INSERT 语句以使用地理/空间数据类型大大增加了我们的开发周期。