sql >> Databáze >  >> RDS >> Mysql

Dotaz SQL pro provádění vyhledávání poloměru na základě zeměpisné šířky a délky

Podle mého názoru bude klauzule WHERE pomalá kvůli matematice a použití funkcí v klauzuli WHERE zabrání tomu, aby databáze používala index k urychlení dotazu - takže ve skutečnosti prozkoumáte každou restauraci v databázi a provádějte matematiku velkého kruhu na každém řádku, pokaždé, když vytvoříte dotaz.

Osobně bych vypočítal souřadnice TopLeft a BottomRight čtverce (který je třeba pouze surově vypočítat pomocí pythagoras) se stranami rovnými rozsahu, který hledáte, a pak bych provedl složitější test klauzule WHERE na menší podmnožině záznamy, které jsou v tomto čtverci zeměpisné šířky/délky.

S indexem na Lat &Long v databázi dotaz

WHERE     MyLat >= @MinLat AND MyLat <= @MaxLat
      AND MyLong >= @MinLong AND MyLong <= @MaxLong

by měl být velmi efektivní

(Upozorňuji, že konkrétně nemám žádné znalosti o MySQL, pouze o MS SQL)



  1. Úvod do Azure Serverless

  2. Nainstalujte pdo pro postgres Ubuntu

  3. GROUP_CONCAT s limitem

  4. Konfigurační soubor hibernace (.cfg.xml) pro mapování více tabulek MySQL ve stejné databázi?