sql >> Databasteknik >  >> RDS >> Mysql

Hitta närmaste platser med hjälp av punktdatatyp och st_distance_sphere i MySQL 8

Det kan vara den bästa lösningen. Låt oss få några andra svar först...

Vad betyder EXPLAIN SELECT ... säga? (Detta kan ge svar på din Q2).

Din fråga kommer att skanna hela tabellen, oavsett de andra svaren. Du kanske vill ha LIMIT ... på slutet?

En annan sak som kan vara användbar (beroende på din app och på Optimizern):Lägg till en begränsningsruta i WHERE klausul.

Gör i alla fall följande för att få en exakt känsla för hur många rader som faktiskt rörs:

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

Återkom med de svaren; då kanske vi kan iterera vidare.

Efter VISA STATUS

Nåväl, Handler_read_rnd_next säger att det var en fullbordsskanning. 1000 och 1001 -- hade du LIMIT 1000 ?

Jag härleder att LIMIT tas inte med i hur SPATIAL Arbetar. Det vill säga, det gör det förenklade -- (1) kontrollera alla rader, (2) sortera, (3) LIMIT .

Så, vad ska man göra?

Plan A:Bestäm att du inte vill ha resultat längre än X miles (km) och lägg till en "avgränsande ruta" i frågan.

Plan B:Överge Spatial och gräv ner i ett mer komplext sätt att utföra uppgiften:http:// mysql.rjweb.org/doc.php/latlng




  1. Varför ser jag SAMMANSTÄLLNING "xxx" är inte giltig för TECKENSET "ååå"

  2. Hur man ändrar färg och teckensnitt i SQL Server Management Studio (SSMS) - SQL Server / TSQL självstudie del 12

  3. Hur kombinerar man LIKE med IN i en MYSQL-fråga?

  4. Flera bord sammanfogar i skenor