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

Permintaan MySQL mana yang lebih cepat?

Anda harus selalu menggunakan EXPLAIN untuk menentukan bagaimana kueri Anda akan dijalankan.

Sayangnya, MySQL akan mengeksekusi subquery Anda sebagai DEPENDENT QUERY, yang berarti bahwa subquery akan dijalankan untuk setiap baris di kueri luar. Anda akan berpikir MySQL akan cukup pintar untuk mendeteksi bahwa subquery bukan subquery yang berkorelasi dan akan menjalankannya sekali saja, sayangnya, itu belum secerdas itu.

Jadi, MySQL akan memindai semua baris pada siswa, menjalankan subquery untuk setiap baris, dan tidak menggunakan indeks apa pun pada kueri luar sama sekali.

Menulis kueri sebagai GABUNG akan memungkinkan MySQL untuk menggunakan indeks, dan kueri berikut akan menjadi cara optimal untuk menulisnya:

SELECT COUNT(*) AS count
FROMstudents s
JOIN classes c
  ON c.id = s.classes_id
  AND c.departments_id = 1
WHERE s.status = 1

Ini akan menggunakan indeks berikut:

students(`status`)
classes(`id`, `departements_id`) : multi-column index


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nama tabel dinamis dalam fungsi prosedur tersimpan

  2. InnoDB Tabelnya penuh kesalahan

  3. Membuat kombinasi tabel/kolom menggunakan SQL Query atau Laravel SQL Query Builder

  4. MySQL - SUM dari sekelompok perbedaan waktu

  5. Grup berbeda Django berdasarkan kueri pada dua bidang