簡體   English   中英

為 MySQL 表中的所有點查找 5 個最近的點(地理空間查詢)

[英]Find 5 closest points for all points in a MySQL table (Geo Spatial query)

我有一個包含 50,000 條記錄的 MySQL 數據庫表,我需要找到最接近每個點的 5 個點以顯示在網站上。 不幸的是,該查詢的計算量很大,並且需要很長時間才能查詢到幾乎 static 條信息(點列表很少會發生變化)

我最終正在尋找一種解決方案來壓縮整個表並設置一個新列,其中包含最近的記錄 ID 列表,使用類似GROUP_CONCAT的東西來制作一個漂亮的逗號分隔列表

我一次可以做一行(現在只需使用選擇——在排序后更新行)

SELECT c.ID, GROUP_CONCAT(items.ID) as list FROM cities as c, (SELECT ID FROM cities ORDER BY ST_Distance_Sphere(cord, POINT(-81.9242,32.5521), 3440) asc LIMIT 5) as items WHERE c.ID = 5185

cord是作為地理空間點存儲在數據庫中的緯度/經度坐標,第二個ST_Distance_Sphere()屬性是為項目 ID 5185 存儲的內容

基本上,我需要弄清楚如何將值傳遞到嵌套的SELECT查詢中,或者有一個我不知道的神奇JOIN

我不知道 MySQL 中的魔術 JOIN 可以做到這一點(PostgreSQL 確實有接近這種魔術的東西)。 如果沒有這種魔力,您可以做的是在距離條件下使用常規空間連接。

訣竅是 MySQL 像許多 DBMS 一樣具有空間索引支持和相當快的空間連接,當您使用索引和限制使用距離條件的搜索時。 因此,如果您只查詢一小段距離內的點 - 查詢速度會快得多。 訣竅是如何計算出合適的距離? 一種方法是從較小的搜索半徑開始,然后增加搜索半徑以尋找距離不夠近的 5 個點。

我在 BigQuery 中發表了幾篇關於這樣做的文章,你可以調整解決方案 MySQL 和 5 個最近的點而不是 1 個。

暫無
暫無

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

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