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

Mengapa permintaan INNER JOIN/ORDER BY mysql ini sangat lambat?

(Saya berasumsi Anda bermaksud mengetik ids.customer_id = customer.customer_id dan bukan customer_ids.customer_id)

Tanpa ORDER BY mysql mengambil 10 id pertama dari tipe 10 (diindeks), mencari pelanggan untuk mereka, dan selesai. (Perhatikan bahwa LEFT JOIN di sini benar-benar INNER JOIN karena kondisi join hanya berlaku untuk baris yang memiliki kecocokan di kedua tabel)

Dengan ORDER BY mysql mungkin mengambil semua type=10 pelanggan lalu urutkan berdasarkan nama depan untuk menemukan 10 pelanggan pertama.

Anda dapat mempercepatnya dengan mendenormalisasi tabel pelanggan (menyalin jenisnya ke dalam catatan pelanggan) atau membuat tabel pemetaan untuk menampung customer_id, name, type tupel. Dalam kedua kasus, tambahkan indeks pada (type, name) . Jika menggunakan tabel pemetaan, gunakan untuk melakukan penggabungan 3 arah dengan pelanggan dan id.

Jika type=10 cukup umum, Anda juga bisa memaksa kueri untuk menelusuri tabel pelanggan berdasarkan nama dan memeriksa jenis masing-masing dengan STRAIGHT JOIN. Ini tidak akan secepat indeks gabungan, tetapi akan lebih cepat daripada menarik semua kecocokan.

Dan seperti yang disarankan di atas, jalankan EXPLAIN pada kueri Anda untuk melihat paket kueri yang digunakan mysql.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:pertahankan zona waktu server atau zona waktu pengguna?

  2. MySQL:kueri efisien pada kolom yang terlalu panjang untuk diindeks

  3. bagaimana smiley dikodekan dalam database mysql utf-8 mb4?

  4. Versi portabel MySql

  5. Bagaimana Cara Menghasilkan nomor Acak tanpa pengulangan dalam database menggunakan PHP?