我搜索了一下,发现很多人想按照到某个点的距离来排序点的表格,但我想知道如何高效地通过两点之间的最小距离将两个表格连接起来。在我的情况下,考虑表格nodes
和centroids
。
CREATE TABLE nodes (
node_id VARCHAR(255),
pt POINT
);
CREATE TABLE centroids (
centroid_id MEDIUMINT UNSIGNED,
temperature FLOAT,
pt POINT
);
我大约有300k个节点和15k个质心,我想找到每个节点最接近的质心,以便为每个节点分配一个温度。目前为止,我已在两个表上的pt
上创建了空间索引,并尝试运行以下查询:
SELECT
nodes.node_id,
MIN(ST_DISTANCE(nodes.pt, centroids.pt))
FROM nodes
INNER JOIN centroids
ON ST_DISTANCE(nodes.pt, centroids.pt) <= 4810
GROUP BY
nodes.node_id
LIMIT 10;
显然,这个查询并不能解决我的问题;它不会检索温度,假设最近的质心在4810内,只评估了10个节点。然而,即使有这些简化,这个查询仍然非常不优化,而且在我输入这段话时仍在运行。当我让MySQL给出有关查询的详细信息时,它说没有使用索引,并且没有将任何空间索引列为可能的键。
我该如何构建一个能够高效地利用空间索引联合返回我所需数据的查询呢?