我有下表:
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以某种方式使用索引来解决这个问题吗?
答案 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。