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

Mức độ hiệu quả khi đặt hàng theo khoảng cách (toàn bộ bảng) trong geodjango

Nếu bạn muốn sắp xếp mọi mục nhập trên bảng đó theo khoảng cách thì nó sẽ chậm như mong đợi và không thể làm được gì (điều đó tôi biết tại thời điểm này và kiến ​​thức của tôi.)!

Bạn có thể làm cho việc tính toán của mình hiệu quả hơn bằng cách làm theo các bước sau và đưa ra một số giả định:

  1. Bật lập chỉ mục không gian trên bàn của bạn. Để làm điều đó trong GeoDjango, hãy làm theo hướng dẫn tài liệu và phù hợp với mô hình của bạn:

  2. Bây giờ bạn có thể thu hẹp truy vấn của mình bằng một số ràng buộc logic:

    Ví dụ: Người dùng của tôi sẽ không tìm kiếm những người cách vị trí hiện tại của anh ta hơn 50 km.

  3. Thu hẹp tìm kiếm bằng cách sử dụng dwithin tra cứu không gian sử dụng lập chỉ mục không gian , do đó nó khá nhanh.

  4. Cuối cùng áp dụng distance sắp xếp theo thứ tự trên các hàng còn lại.

Truy vấn cuối cùng có thể giống như sau:

current_location = me.location
people = People.objects.filter(
    location__dwithin=(current_location, D(km=50))
).annotate(
    distance=Distance('location', current_location)
).order_by('distance')

Tái bút: Thay vì tạo một nỗ lực phân trang tùy chỉnh, sẽ hiệu quả hơn nếu sử dụng các phương pháp phân trang được cung cấp cho các chế độ xem django:

Hoặc bạn có thể sử dụng Django Rest Framework và sử dụng phân trang của 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. Làm cách nào để tạo sự di chuyển đường ray để loại bỏ / thay đổi độ chính xác và tỷ lệ trên số thập phân?

  2. Hiển thị tin nhắn mới nhất từ ​​bảng tin nhắn, nhóm theo người dùng

  3. PostgreSQL không tốt với mảng trống

  4. Tìm các bài báo trong đó mảng

  5. WHERE KHÔNG tồn tại trong PostgreSQL đưa ra lỗi cú pháp