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

Hledání nejbližších míst pomocí datového typu bodu a st_distance_sphere v MySQL 8

může být nejlepším řešením. Pojďme nejprve získat nějaké další odpovědi...

Co znamená EXPLAIN SELECT ... říci? (To může odpovědět na vaši otázku 2).

Váš dotaz prohledá celou tabulku bez ohledu na ostatní odpovědi. Možná chcete LIMIT ... na konci?

Další věc, která by mohla být užitečná (v závislosti na vaší aplikaci a na Optimalizátoru):Přidejte ohraničovací rámeček do WHERE doložka.

V každém případě proveďte následující, abyste získali přesný přehled o tom, kolika řádků se skutečně dotknete:

FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';

Vraťte se s těmi odpověďmi; pak možná můžeme opakovat dále.

Po ZOBRAZIT STAV

Dobře, Handler_read_rnd_next říká, že to byl úplný sken tabulky. 1000 a 1001 – měli jste LIMIT 1000 ?

Z toho vyvozuji LIMIT není zohledněno v tom, jak SPATIAL funguje. To znamená, že dělá zjednodušenou věc -- (1) zkontrolovat všechny řádky, (2) seřadit, (3) LIMIT .

Takže, co dělat?

Plán A:Rozhodněte se, že nechcete mít výsledky dále než X mil (km) a přidejte k dotazu „ohraničující rámeček“.

Plán B:Opusťte prostor a vrhněte se na složitější způsob provedení úkolu:http:// mysql.rjweb.org/doc.php/latlng




  1. Jak mohu pomocí MySQL vybrat hodnocení výsledku dotazu pro jeden konkrétní řádek?

  2. Vytvořte tabulku s kontrolou PHP s hodnotou před a aktuální hodnotou (Array)

  3. Neo4j - Vytvořte vztah pomocí Cypher

  4. Nastavte velkou databázi v MySQL pro analýzu v R