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

Mengoptimalkan MySQL ORDER BY pada perhitungan yang dibagikan dengan WHERE

Tidak, perhitungan tidak akan dilakukan dua kali jika ditulis dengan cara yang persis sama. Namun jika tujuan Anda adalah untuk meningkatkan kinerja aplikasi Anda, maka Anda mungkin ingin melihat gambaran yang lebih besar daripada berkonsentrasi pada detail kecil ini yang dapat memberi Anda paling banyak dua faktor perbedaan. Masalah yang lebih serius adalah kueri Anda mencegah penggunaan indeks yang efisien dan akan menghasilkan pemindaian penuh.

Saya sarankan Anda mengubah database Anda sehingga Anda menggunakan tipe geometri dan membuat indeks spasial pada data Anda. Kemudian Anda dapat menggunakan MBRWithin untuk segera menemukan titik-titik yang terletak di dalam kotak pembatas lingkaran Anda. Setelah Anda menemukan titik-titik itu, Anda dapat menjalankan tes jarak yang lebih mahal hanya pada titik-titik itu. Pendekatan ini akan jauh lebih cepat jika tabel Anda besar dan penelusuran biasa hanya mengembalikan sebagian kecil baris.

Jika model data tidak dapat diubah maka Anda masih dapat meningkatkan performa dengan menggunakan kotak pembatas terlebih dahulu, misalnya WHERE x BETWEEN 10 AND 20 AND y BETWEEN 50 AND 60 . Centang kotak pembatas akan dapat menggunakan indeks, tetapi karena indeks R-Tree hanya didukung pada jenis geometri, Anda harus menggunakan indeks B-Tree standar yang tidak seefisien untuk jenis kueri ini (tetapi masih banyak lebih baik dari apa yang Anda lakukan saat ini).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHPmailer - Beberapa pengiriman email

  2. Bisakah saya mengontrol GROUP BY di orm Django 1.3?

  3. Mencoba 'memanggil' prosedur tersimpan dengan CodeIgniter

  4. Apa cara terbaik untuk menghentikan kolom dalam skema database?

  5. Cara membuat profil MySQL