在MySQL中有最近邻搜索的方法吗?

时间:2013-10-13 15:04:37

标签: mysql sql

我有下表:

 CREATE TABLE numbert_t ( v DOUBLE , id INTEGER, INDEX(v) ) 

我想用一个paremeter q进行查询,对距离abs(q-v)中的点进行排序。例如

 SELECT v, id, ABS( q - v ) AS d FROM number_t ORDER BY d 

我尝试了上面的查询和这一个:

 SELECT v, id, (v - q) AS d FROM numbers_t WHERE (v - q) > 0
 ORDER BY d

我也试过上面的略有变化:

 SELECT v, id, (v - q) AS d FROM numbers_t WHERE v > q ORDER BY v 

它们并不等同,但我不介意做两个查询并且有两个独立的游标。但是,在所有情况下,EXPLAIN都说文件输出,不会使用任何索引。我可以让MySQL以某种方式使用索引来解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

你有没有尝试过:

SELECT MIN(v), id FROM number_t WHERE v >= q
UNION
SELECT MAX(v), id FROM number_t WHERE v < q

MySQL特定的,不是标准的,因为id。但是在获得确切的值之后,可能会在中检索到id。

答案 1 :(得分:1)

您可以使用空间扩展和点数据类型。然后,您可以使用邻近搜索,例如当一个点位于边界框内时。您也可以使用我的quadkey库。它使用希尔伯特曲线和墨卡托投影。你可以下载我的php类hilbert curve @ phpclasses.org。