PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

ST_DDalam terkadang tidak menggunakan indeks

ST_DWithin dokumentasi menyatakan bahwa tanda tangan fungsi pertama menerima tipe geografi bukan tipe geometri :

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

karena (lokasi,ST_SetSRID(ST_MakePoint(20, -30), 4326)) adalah semua geometri, masuk akal jika eksekusi fungsi berantakan. Dan saya pikir fungsi kedua Anda berfungsi dengan baik karena apa yang Anda jalankan adalah tanda tangan ini :

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

Dan seperti yang Anda nyatakan bahwa mengalihkan jenis kolom ke Geografi alih-alih Geometri akan menyelesaikan masalah karena itu akan memberi Anda eksekusi yang benar dari :

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

Semoga ini bisa sedikit membantu.

Sunting:

Temukan bagian ini di dokumentasi yang menyatakan bahwa pada saat entri data

ini bisa menjelaskan mengapa Postgres menerima permintaan pertama Anda dari ST_DWithin() karena postgis tampaknya akan mengirimkannya ke geografi, dan itu juga menjelaskan mengapa eksekusi membutuhkan waktu lebih lama dan mengabaikan indeks karena setiap casting akan menghasilkan objek baru yang tidak diindeks kolom asli Anda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Keuntungan dari ENUM vs. hubungan satu-ke-banyak?

  2. Tidak dapat menggunakan tabel bernama pengguna di postgresql hibernate

  3. Penyatuan koneksi Postgresql di Erlang

  4. Postgres now() stempel waktu tidak berubah, saat skrip berfungsi

  5. Pertandingan Awalan Terpanjang