PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak szybko zdobyć 13 rekordowej linii w pobliżu punktu (lon, lat) postgis

Możesz zastosować funkcję odległości za pomocą operatora <-> bezpośrednio w ORDER BY klauzula. W ten sposób planista użyje indeksu Gist:

EXPLAIN (ANALYSE,COSTS OFF)
SELECT * FROM data
ORDER BY geog <-> ST_Point(6.5, 48.7) 
LIMIT 13;

                            QUERY PLAN
----------------------------------------------------------------------
Limit (actual time=15.019..15.213 rows=13 loops=1)
  ->  Index Scan using idx_data_point on data (actual time=15.017..15.210 rows=13 loops=1)
        Order By: (geog <-> '0101000020E61000000000000000001A409A99999999594840'::geography)
Planning Time: 0.372 ms
Execution Time: 15.309 ms

Demo:db<>fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przejdź sql - zakres przygotowanych instrukcji

  2. PostgreSQL:porównanie ciągów bez rozróżniania wielkości liter

  3. Znajdź przerwy w sekwencji w SQL bez tworzenia dodatkowych tabel

  4. FATAL:root roli nie istnieje

  5. Jak ograniczyć dostęp do bazy danych w PostgreSQL