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

Използването на оператор OR на WHERE в MySql причинява бавно изпълнение

Да, OR често е убиец на представянето. Често срещано решение е да направите UNION . За вашия пример:

SELECT  *
    FROM  `posts`
    LEFT JOIN  `teams_users`
               ON (teams_users.team_id=posts.team_id
              AND  teams_users.user_id='7135')
    WHERE  (teams_users.status='1')
UNION DISTINCT
SELECT  *
    FROM  `posts`
    LEFT JOIN  `teams_users`
               ON (teams_users.team_id=posts.team_id
              AND  teams_users.user_id='7135')
    WHERE  (posts.user_id='7135');

Ако сте сигурни, че няма дублиране, променете на по-бързия UNION ALL .

Ако не търсите липсващи team_users редове, използвайте JOIN вместо LEFT JOIN .

Ако имате нужда от ORDER BY , добавете няколко скоби:

( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...

В противен случай ORDER BY ще се прилага само за втория SELECT . (Ако имате нужда и от „пагиниране“, вижте моя блог .)

Моля, имайте предвид, че може да се нуждаете и от LIMIT при определени обстоятелства.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Codeiginter mysql, съхраняващ китайски знаци като въпросителни

  2. Не мога да получа данни на mysql (Избор на CodeIgniter)

  3. Какъв е еквивалентът на командата spool в MySQL?

  4. MySQL VARCHAR(255) UTF8 е твърде дълъг за ключ, но максималната дължина е 1000 байта

  5. Проверете за дубликати, преди да поставите