PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

ST_DWithin понякога не използва индекс

ST_DWithin документацията посочва, че подписът на първата функция приема географски типове, а не геометрични типове:

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

тъй като (location,ST_SetSRID(ST_MakePoint(20, -30), 4326)) всички са геометрии, би имало смисъл изпълнението на функцията да е объркано. И мисля, че втората ви функция работи правилно, защото това, което изпълнявахте, беше този подпис :

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

И както казахте, че превключването на типовете колони към География вместо Геометрия ще реши проблема, тъй като това ще ви осигури правилното изпълнение на:

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

Надявам се това да помогне малко.

Редактиране:

Намерих тази част в документацията което гласи, че при въвеждане на данни

това може да обясни защо Postgres прие първото ви извикване на ST_DWithin(), тъй като postgis очевидно ще го прехвърли към география, и това също обяснява защо изпълнението отнема повече време и пренебрегва индекса, тъй като всяко прехвърляне би довело до нов обект, който не е индексиран в вашата оригинална колона.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаването на „групиране по“ води до множество колони

  2. Как да настроя SSH тунел в Google Cloud Dataflow към външен сървър на база данни?

  3. RAILS:Как да направите заявка за всички обекти, чиято всяка асоциация има атрибут, който не е нула

  4. Как да получите средни стойности за времеви интервали в Postgres

  5. Промяна на типа на полето varchar на цяло число:не може да се прехвърля автоматично към тип цяло число