sql >> Databáze >  >> RDS >> PostgreSQL

ST_DWithin někdy nepoužívá index

ST_DWithin dokumentace uvádí, že první podpis funkce přijímá geografické typy, nikoli typy geometrie:

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

protože (location,ST_SetSRID(ST_MakePoint(20, -30), 4326)) jsou všechny geometrie, dávalo by smysl, že provádění funkce je chaotické. A myslím, že vaše druhá funkce fungovala správně, protože to, co jste spouštěli, byl tento podpis :

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

A jak jste uvedl, přepnutím typů sloupců na Geografii místo Geometrie by se problém vyřešil, protože byste získali správné provedení:

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);

Doufám, že to trochu pomůže.

Upravit:

Tuto část jsem nalezl v dokumentaci který uvádí, že při zadávání dat

to by mohlo vysvětlovat, proč Postgres přijal vaše první vyvolání ST_DWithin(), protože postgis by to zjevně přenesl do geografie, a to také vysvětluje, proč provádění trvá déle a zanedbává index, protože každé přetypování by vedlo k novému objektu, který není indexován v váš původní sloupec.




  1. Chyba DBX:Ovladač nelze správně inicializovat

  2. Nastavení schématu pro všechny dotazy připojení v psycopg2:Získání podmínky sporu při nastavování vyhledávací_cesta

  3. Jaký typ dat použít pro popis?

  4. SQL pro získání přátel A přátel přátel uživatele