簡體   English   中英

計算兩點之間的距離非常慢

[英]Calculating distance between two points is very Slow

我將X,Y坐標的地圖存儲在POINT()行中的“ coordinates”表中。

目前這是一張1000x1000的網格圖,因此有1百萬行

如果我想為所選點選擇所有相鄰坐標(假設它是130、130),則觸發此查詢:

SET @x = 130;
SET @y = 130;

SELECT astext(PointFromWKB(coordinates)) AS coords, 
ROUND(GLength(LineStringFromWKB(LineString(GeomFromText(astext(PointFromWKB(coordinates))),
      GeomFromText(astext(PointFromWKB(POINT(@x, @y)))))))) AS distance 
FROM coordinates 
ORDER BY distance

但這非常慢-處理此查詢大約需要2,50秒,如果我刪除ORDER BY語句,它幾乎是即時的。

我如何加快速度?

我為坐標列創建了SPATIAL索引,但是我不知道如何使用它。

您可以按以下方式將查詢和訂單分開

 SET @x = 130; SET @y = 130; select * from ( SELECT astext(PointFromWKB(coordinates)) AS coords, ROUND(GLength(LineStringFromWKB(LineString(GeomFromText(astext(PointFromWKB(coordinates))), GeomFromText(astext(PointFromWKB(POINT(@x, @y)))))))) AS distance FROM coordinates ) as t ORDER BY distance; 

這將快速運行您的查詢,然后對結果集進行排序,這也是一項快速的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM