Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да оптимизирате тази проста заявка на Mysql

ИЛИ условия, когато не се базират на едно и също поле или диапазон (като < , > , Харесвам ) наистина намалява способността на MySQL да се възползва от индекси; можете да преструктурирате заявки, като ги разделите на отделни по-прости, които след това можете да UNION. Разделянето му по този начин позволява на MySQL да се възползва от различен индекс на всяка заявка в рамките на 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%'
;

Също така имайте предвид, че промених JOIN на последното на INNER, тъй като всяко условие в дясната таблица на LEFT JOIN (което не е „без съвпадение от тази таблица“) така или иначе е основно INNER JOIN.

UNION DISTINCT се използва за предотвратяване на повтаряне на записи, които отговарят на множество условия, но... ако companies.company не е уникален (т.е. фирмен идентификатор 1, наречен "Бла" и фирмен идентификатор 12, наречен също "Бла"), тогава те също ще бъдат обединени там, където не биха били в първоначалната ви заявка; ако е потенциален проблем, той може да бъде отстранен, като също така включите company_id във всеки 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. как да вмъкнете HTML код в DB с помощта на php

  2. Динамичен псевдоним на колона въз основа на стойността на колоната

  3. Естествено сортиране на SQL ПОРЪЧАЙ ПО

  4. Липсва файл /var/lib/mysql/mysql.sock

  5. Как давате възможност на клиентите да влизат във вашия сайт, като използват акаунта си в Google?