sql >> Database teknologi >  >> RDS >> Mysql

Hvordan man optimerer denne Mysql simple forespørgsel

ELLER betingelser, når de ikke er baseret på det samme felt eller område (såsom <). , > , LIKE ) virkelig mindske MySQL's evne til at drage fordel af indekser; du kan omstrukturere forespørgsler ved at opdele dem i separate enklere forespørgsler, som du derefter kan UNION. Ved at adskille det på denne måde kan MySQL drage fordel af et forskelligt indeks for hver forespørgsel i UNION'erne

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%'
;

Bemærk også, at jeg ændrede den sidstes JOIN til en INNER, da en hvilken som helst betingelse på bordet til højre for en LEFT JOIN (det er ikke "uden en match fra den tabel") grundlæggende er en INNER JOIN alligevel.

UNION DISTINCT bruges til at forhindre registreringer, der opfyldte flere betingelser, i at blive gentaget, men... hvis virksomheder.virksomhed er ikke unik (dvs. virksomheds-id 1 kaldet "Blah" og virksomheds-id 12 også kaldet "Blah"), så vil disse også blive flettet, hvor de ikke ville være i din oprindelige forespørgsel; hvis det er et potentielt problem, kan det afhjælpes ved også at inkludere virksomheds-id i hver SELECT .




  1. En primær skal inkludere alle kolonner i tabellens partitioneringsplaceringsfejl?

  2. MySQL-forespørgsel for at hente data med kolonnenavne

  3. Hvad er den nemmeste måde at afgøre, om en bruger er online? (PHP/MYSQL)

  4. Mysql INSTR lignende operation i mongodb