根据与坐标的距离加快mySQL SPATIAL选择的速度

问题描述 投票:0回答:1

做距离时,我试图通过使用纬度/经度字段(CHAR)将我们的网站移开。这是我们目前的操作方式:

SELECT ID,( 6371 * acos( cos( radians(52.35462) ) * cos( radians( glinks_Links.Latitude ) ) * cos( radians( glinks_Links.Longitude ) - radians(4.88227) ) + sin( radians(52.35462) ) * sin( radians( glinks_Links.Latitude ) ) ) ) AS distance FROM glinks_Links
WHERE
    (
    ((Latitude BETWEEN (52.35462 - 40/69.0) AND (52.35462 + 40/69.0)) )
    AND
    (Longitude BETWEEN (4.88227 - 40/42.5) AND (4.88227 + 40/42.5))
    )
HAVING distance < 40 ORDER BY distance

...然后返回为>>

Showing rows 0 - 24 (1855 total, Query took 0.0288 seconds.)

然后是另一个实际上返回“距离”的版本(因为我们要按此排序,并且仅包括最接近的内容;]]

SELECT ID,st_distance_sphere(POINT(4.88227,52.35462), point_test) / 1000 AS distance FROM glinks_Links WHERE ( ((Latitude BETWEEN (52.35462 - 40/69.0) AND (52.35462 + 40/69.0)) ) AND (Longitude BETWEEN (4.88227 - 40/42.5) AND (4.88227 + 40/42.5)) ) HAVING DISTANCE < 100 ORDER BY distance LIMIT 100 

给予:

Showing rows 0 - 99 (100 total, Query took 0.0237 seconds.)

然后似乎是最好的:

SELECT * 
FROM glinks_Links
where st_distance_sphere(POINT(4.88227,52.35462), point_test)/1000 <= 100

显示第0-24行(共3439行,查询花费0.0015秒。)

不过,问题是-它没有为我提供距离!我想做的就是查询并抓住最接近的100个。有没有办法我可以做到这一点而又不牺牲速度呢?

做距离时,我试图通过使用纬度/经度字段(CHAR)将我们的网站移开。这是我们当前的操作方式:SELECT ID,(6371 * acos(cos(radians(52.35462))* cos(radians(...

mysql spatial
1个回答
0
投票

请确保您在]上具有正确的综合索引>

 create index  my_idx ON  glinks_Links (Latitude, Longitude, ID)

并且您不需要无用()来确定where条件(使用AND)

© www.soinside.com 2019 - 2024. All rights reserved.