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

Bagaimana cara mengoptimalkan kueri sederhana Mysql ini?

OR kondisi saat tidak berdasarkan bidang atau rentang yang sama (seperti < , > , LIKE ) benar-benar menurunkan kemampuan MySQL untuk memanfaatkan indeks; Anda dapat menyusun ulang kueri dengan memecahnya menjadi kueri terpisah yang lebih sederhana yang kemudian dapat Anda UNION. Memisahkannya seperti ini memungkinkan MySQL untuk memanfaatkan indeks yang berbeda dari setiap kueri dalam UNION

SELECT `u`.`user_id`, `c`.`company`
FROM `users` AS `u` LEFT JOIN `companies` AS `c` ON `c`.`user_id` = `u`.`user_id`
WHERE `u`.`user_id` = 'search_term' 
UNION DISTINCT 
SELECT `u`.`user_id`, `c`.`company`
FROM `users` AS `u` LEFT JOIN `companies` AS `c` ON `c`.`user_id` = `u`.`user_id`
WHERE `u`.`lname` LIKE 'search_term%'    
UNION DISTINCT 
SELECT `u`.`user_id`, `c`.`company`
FROM `users` AS `u` LEFT JOIN `companies` AS `c` ON `c`.`user_id` = `u`.`user_id`
WHERE `u`.`email` LIKE 'search_term%'
UNION DISTINCT 
SELECT `u`.`user_id`, `c`.`company`
FROM `users` AS `u` INNER JOIN `companies` AS `c` ON `c`.`user_id` = `u`.`user_id`
WHERE `c`.`company` LIKE 'search_termeo%'
;

Juga, perhatikan bahwa saya mengubah JOIN yang terakhir menjadi INNER karena kondisi apa pun di tabel sebelah kanan LEFT JOIN (yang bukan "tanpa kecocokan dari tabel itu") pada dasarnya adalah INNER JOIN.

UNION DISTINCT digunakan untuk mencegah pengulangan record yang memenuhi beberapa kondisi, namun... jika companies.company tidak unik (yaitu id perusahaan 1 disebut "Blah" dan id perusahaan 12 juga disebut "Blah") maka itu juga akan digabungkan di tempat yang tidak ada dalam kueri asli Anda; jika ini merupakan masalah potensial, itu dapat diatasi dengan menyertakan juga company_id di setiap SELECT .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel LeftBergabung di mana

  2. Meminta string dari kolom int?

  3. SUM FUNGSI tidak ada

  4. MySQL Pilih Where In Many to Many

  5. validasi formulir ajax dengan mysqli_query