Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL Query Lambat saat menggunakan Order By dengan fungsi menghitung jarak antara dua titik (panjang, lat)

Opsi:

  1. Memasukkan pengurutan ke dalam definisi/logika prosedur tersimpan Anda. Jika Anda memanggil SQL, pilih dalam prosedur tersimpan Anda, lakukan pengurutan dan batas di sana . - Ini berarti Anda tidak akan menghasilkan 10.000 baris dalam prosedur tersimpan, hanya untuk menggunakannya. Juga, jika tabel memiliki indeks, pengurutan asli dalam SQL, pilih mungkin jauh lebih cepat.

  2. Verifikasi bahwa pengindeksan digunakan dalam tabel Anda. - Indeks akan menyebabkan pengurutan Anda dilakukan lebih cepat saat memilih di atas meja.

Harap berikan kami definisi fungsi, akan lebih mudah untuk membantu Anda.

Terakhir, coba pindahkan pesanan Anda dan batasi langsung di dalam fungsi Anda alih-alih melakukannya nanti. Fungsi Anda dapat mengembalikan 10 hasil yang langsung disortir dan siap. Jika Anda mau, buat dua fungsi - satu yang mengembalikan hasil lengkap dan yang mengembalikannya terbatas dan diurutkan.

Pembaruan:

Setelah melihat fungsi Anda, menjadi jelas bahwa Anda mencoba memesan dengan nilai yang dihitung. Pemesanan dengan nilai yang dihitung sangat lambat seperti yang juga disebutkan di:

Saya mencoba memikirkan bagaimana Anda bisa "memproses/memesan" data Anda berdasarkan col1 atau col2 untuk mempercepat pemesanan akhir hasil Anda. Jika col1 dan col2 adalah kolom dari tabel, dan funResult adalah fungsi matematika yang dapat dibuat grafiknya, salah satu dari keduanya memiliki efek yang lebih tinggi pada nilai pengembalian fungsi....

Terakhir, jika col1 dan col2 adalah kolom dari myTable, Anda tidak perlu menggunakan fungsi tersimpan tetapi dapat melakukan kueri, tetapi ini tidak akan membuat perbedaan besar... Masalah utama Anda adalah memesan dengan fungsi terhitung:

SELECT rowId, ((col1-INPUT_CONST)*2)+(col2*3) AS funResult
FROM myTable
ORDER BY funResult DESC
LIMIT 10

Pembaruan 2:

Setelah menggali untuk masalah penyortiran dihitung jarak saya menemukan bahwa ini telah ditanyakan dan diselesaikan dengan sangat efisien di tautan di bawah ini. Sehubungan dengan pengurutan berdasarkan nilai yang dihitung, karena pengurutan Anda berdasarkan nilai yang dihitung, itu secara inheren lambat. Lihat dua tautan berikut untuk bantuan tambahan:

Akhirnya, jawaban Anda yang paling mendekati adalah ini: https://stackoverflow.com/a/4180065/1688441



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. php tidak dapat terhubung ke mysql di docker-compose

  2. Tidak dapat terhubung ke server mysql jarak jauh menggunakan unixodbc, libmyodbc

  3. Kegagalan tautan komunikasi - paket terakhir yang berhasil diterima dari server adalah

  4. Bagaimana Cara Membangun Kembali Budak MySQL yang Tidak Konsisten?

  5. Kerangka kerja entitas dengan migrasi database mysql gagal, saat membuat indeks