PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

ST_DWithin đôi khi không sử dụng chỉ mục

ST_DWithin tài liệu nói rằng chữ ký hàm đầu tiên chấp nhận các loại địa lý không phải là các loại hình học:

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

vì (location, ST_SetSRID (ST_MakePoint (20, -30), 4326)) đều là dạng hình học nên việc thực thi hàm sẽ lộn xộn. :

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

Và như bạn đã nói rằng việc chuyển các loại cột thành Địa lý thay vì Hình học sẽ giải quyết được vấn đề vì điều đó sẽ giúp bạn thực thi chính xác:

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

Hy vọng điều này sẽ giúp một chút.

Chỉnh sửa:

Tìm thấy phần này trong tài liệu nói rằng khi nhập dữ liệu

điều này có thể giải thích tại sao Postgres chấp nhận lệnh gọi ST_DWithin () đầu tiên của bạn vì dường như postgis sẽ truyền nó tới vị trí địa lý và điều đó cũng giải thích tại sao quá trình thực thi mất nhiều thời gian hơn và bỏ qua chỉ mục vì mỗi lần truyền sẽ dẫn đến một đối tượng mới không được lập chỉ mục cột ban đầu của bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. org.postgresql.util.PSQLException:LỖI:cột user0_.id không tồn tại - Hibernate

  2. Các hàm PostgreSQL trả về void

  3. biểu thức bảng chung có thể ghi và nhiều câu lệnh chèn

  4. Xây dựng hình ảnh trung tâm docker keycloak trong openshift từ lệnh ứng dụng mới

  5. Tạo cơ sở dữ liệu bằng cách sử dụng một chức năng được lưu trữ