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

Mengapa MySQL tidak selalu menggunakan penggabungan indeks di sini?

Wow! Itu adalah "penggabungan indeks" paling rumit yang pernah saya lihat.

Biasanya (mungkin selalu ), Anda dapat membuat indeks 'gabungan' untuk menggantikan indeks-gabungan-berpotongan, dan berkinerja lebih baik . Ubah key2 dari hanya (pinned) ke (pinned, DeviceId) . Ini mungkin singkirkan 'persimpangan' dan percepat.

Secara umum, Pengoptimal menggunakan penggabungan indeks hanya dalam keputusasaan. (Saya rasa ini adalah jawaban untuk pertanyaan judul.) Setiap perubahan kecil pada kueri atau nilai yang terlibat, dan Pengoptimal akan menjalankan kueri tanpa penggabungan indeks.

Peningkatan pada tabel temp __codes adalah membuat tabel permanen dengan rentang nilai yang besar, lalu menggunakan rentang nilai dari tabel tersebut di dalam Proc Anda. Jika Anda menggunakan MariaDB, gunakan tabel "urutan" yang dibuat secara dinamis. Misalnya 'tabel' seq_1_to_100 adalah efektif tabel satu kolom dengan nomor 1..100. Tidak perlu mendeklarasikan atau mengisinya.

Anda dapat menyingkirkan REPEAT lainnya loop dengan komputasi waktu dari Code .

Menghindari LOOPs akan menjadi manfaat kinerja terbesar.

Selesaikan semuanya, mungkin saya punya tips lain.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membaca , sebagai <br /> di PHP/MySQL?

  2. Bagaimana cara menentukan ukuran transaksi maksimum di MySQL?

  3. Perlu untuk menanyakan kombinasi yang berbeda dari dua bidang, bersama dengan hitungan bahwa kombinasi yang berbeda terjadi

  4. sql bergabung sebagai diagram venn

  5. Bagaimana cara memilih pengunjung unik per interval tanggal?