[英]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.