sql >> Databasteknik >  >> RDS >> PostgreSQL

Det effektivaste sättet att hitta punkter inom en viss radie från en given punkt

Att skapa en buffert för att hitta punkterna är ett bestämt nej-nej på grund av (1) overheaden för att skapa geometrin som representerar bufferten och (2) punkt-i-polygon-beräkningen är mycket mindre effektiv än en enkel avståndsberäkning.

Du arbetar uppenbarligen med (longitud, latitud) data så du bör konvertera det till ett lämpligt kartesiskt koordinatsystem som har samma måttenhet som ditt avstånd på 10 000. Om det avståndet är i meter kan du också kasta punkten från tabellen till geography och beräkna direkt på (lång, lat) koordinaterna. Eftersom du bara vill identifiera de punkter som ligger inom det angivna avståndet kan du använda ST_DWithin() funktion med beräkning av sfären för ökad hastighet (gör inte detta när du är på mycket höga breddgrader eller med mycket långa avstånd):

SELECT id, point 
FROM my_table 
WHERE ST_DWithin(point::geography,
                 ST_GeogFromText('POINT(-116.768347 33.911404)'),
                 10000, false);


  1. Vilken är den enklaste webbplatssökningsapplikationen att implementera, som stöder fuzzy sökning?

  2. SQLDependency-motsvarighet för MySQL

  3. Hur man får det aktuella datumet i PostgreSQL

  4. Hur man infogar flera rader i samma tabell-Oracle 10g