sql >> Database teknologi >  >> RDS >> PostgreSQL

ST_DWithin bruger nogle gange ikke indeks

ST_DWithin dokumentation angiver, at den første funktionssignatur accepterer geografityper ikke geometrityper :

boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters, boolean use_spheroid);

da (placering,ST_SetSRID(ST_MakePoint(20, -30), 4326)) alle er geometrier, ville det give mening, at udførelsen af ​​funktionen er rodet. Og jeg tror, ​​at din anden funktion fungerede korrekt, fordi det, du udførte, var denne signatur :

boolean ST_DWithin(geometry g1, geometry g2, double precision distance_of_srid);

Og som du sagde, at skift af kolonnetyper til Geografi i stedet for Geometri ville løse problemet, da det ville give dig den korrekte udførelse af:

boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters);

boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters, boolean use_spheroid);

Håber dette hjælper lidt.

Rediger:

Fandt denne del i dokumentationen der angiver, at ved dataindtastning

dette kunne forklare, hvorfor Postgres accepterede din første påkaldelse af ST_DWithin(), da postgis tilsyneladende ville kaste den til geografi, og det forklarer også, hvorfor udførelsen tager længere tid og negligerer indekset, da hver casting ville resultere i et nyt objekt, der ikke er indekseret i din oprindelige kolonne.




  1. SQL Server - stop eller bryd udførelse af et SQL-script

  2. IllegalStateException:database allerede lukket (ved hjælp af ViewPager)

  3. mysqli:kan det forberede flere forespørgsler i en erklæring?

  4. Opretter forbindelse til SQL Server 2012 ved hjælp af sqlalchemy og pyodbc