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

Mencoba mengoptimalkan kueri MySQL dengan LEFT OUTER JOIN

Sayangnya mysql (dan mungkin dbms apa pun) tidak dapat mengoptimalkan ekspresi seperti jobs.status != 331 and ack = 0 karena B-Tree bukanlah struktur yang memungkinkan untuk menemukan dengan cepat apa pun yang tidak-sama-dengan-nilai-konstan. Dengan demikian, Anda akan selalu mendapatkan pemindaian penuh.

Jika ada kondisi yang lebih baik seperti jobs.status = 331 and ack = 0 (perhatikan fakta bahwa saya telah mengubah != ke = ) maka akan menjadi saran untuk mempercepat kueri ini:

  1. bagi kueri menjadi 2, bergabung dengan UNION ALL
  2. ganti dalam satu kueri LEFT JOIN ke INNER JOIN (dalam salah satu yang menyiratkan bahwa wq.info is not NULL )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Relevansi pencarian teks lengkap diukur dalam?

  2. Klausa WHERE sebelum INNER JOIN

  3. Kesalahan fatal:panggilan ke fungsi anggota fetch_array() di boolean

  4. Harga MIN/MAX untuk setiap produk (permintaan)

  5. mysql_fetch_assoc():argumen yang diberikan bukan sumber hasil MySQL yang valid