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

Bagaimana saya bisa mempercepat kueri MySQL dengan banyak gabungan?

Saya akan mencoba yang berikut ini:

Pertama, pastikan ada indeks pada tabel dan kolom berikut (setiap kumpulan kolom dalam tanda kurung harus merupakan indeks terpisah):

table1 : (subscribe, CDate)
         (CU_id)
table2 : (O_cid)
         (O_ref)
table3 : (I_oref)
         (I_pid)
table4 : (P_id)
         (P_cat)
table5 : (C_id, store)

Kedua, jika menambahkan indeks di atas tidak meningkatkan banyak hal seperti yang Anda inginkan, coba tulis ulang kueri sebagai

SELECT DISTINCT t1.first_name, t1.last_name, t1.email FROM
  (SELECT CU_id, t1.first_name, t1.last_name, t1.email
     FROM table1
     WHERE subscribe = 1 AND
           CDate >= $startDate AND
           CDate <= $endDate) AS t1
  INNER JOIN table2 AS t2
    ON t1.CU_id = t2.O_cid   
  INNER JOIN table3 AS t3
    ON t2.O_ref = t3.I_oref   
  INNER JOIN table4 AS t4
    ON t3.I_pid = t4.P_id   
  INNER JOIN (SELECT C_id FROM table5 WHERE store = 2) AS t5
    ON t4.P_cat = t5.C_id

Saya berharap di sini bahwa sub-pilihan pertama akan mengurangi secara signifikan jumlah baris yang akan dipertimbangkan untuk bergabung, semoga membuat gabungan berikutnya bekerja lebih sedikit. Sama dengan alasan di balik sub-pilihan kedua pada tabel5.

Dalam hal apapun, mengacaukannya. Maksud saya, pada akhirnya itu hanya SELECT - Anda tidak dapat melukai apa pun dengannya. Periksa rencana yang dihasilkan oleh setiap permutasi yang berbeda dan coba cari tahu apa yang baik atau buruk dari masing-masing permutasi.

Bagikan dan nikmati.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pernyataan JIKA tidak valid di posisi ini

  2. Cara menulis string UTF-8 dengan benar ke MySQL melalui antarmuka JDBC

  3. Koordinat perbandingan dalam database

  4. Memindahkan baris dari satu tabel ke tabel lainnya (Sisipkan daftar nilai tidak cocok dengan daftar kolom)

  5. Kode kesalahan MySQL:1175 selama UPDATE (MySQL-Workbench vs. console)