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

Seberapa efisien untuk memesan berdasarkan jarak (seluruh tabel) di geodjango

Jika Anda ingin mengurutkan setiap entri di meja itu berdasarkan jarak, maka itu akan berjalan lambat seperti yang diharapkan dan tidak ada yang bisa dilakukan (yang saya sadari saat ini dan sepengetahuan saya.)!

Anda dapat membuat perhitungan Anda lebih efisien dengan mengikuti langkah-langkah ini dan membuat beberapa asumsi:

  1. Aktifkan pengindeksan spasial di meja Anda. Untuk melakukannya di GeoDjango, ikuti petunjuk doc dan sesuaikan dengan model Anda:

  2. Sekarang Anda dapat mempersempit kueri Anda dengan beberapa batasan logis:

    Mis: Pengguna saya tidak akan mencari orang lebih dari 50km dari posisinya saat ini.

  3. Persempit penelusuran menggunakan dwithin pencarian spasial yang menggunakan pengindeksan spasial , oleh karena itu cukup cepat.

  4. Terakhir terapkan distance pesan di baris yang tersisa.

Permintaan terakhir dapat terlihat seperti ini:

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

PS: Daripada membuat upaya pagination khusus, lebih efisien untuk menggunakan metode pagination yang disediakan untuk tampilan django:

Atau Anda dapat menggunakan Django Rest Framework dan menggunakan pagination-nya:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jsonb vs jsonb[] untuk beberapa alamat untuk pelanggan

  2. perbarui data xml menggunakan kueri sql di postgresql

  3. KESALAHAN:parameter input setelah satu dengan nilai default juga harus memiliki default di Postgres

  4. PostgreSQL untuk menemukan titik tengah antara dua cap waktu

  5. Hasilkan serangkaian bulan untuk setiap baris di Oracle