Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Użycie instrukcji OR on WHERE w MySQL powoduje powolne wykonanie

Tak, OR jest często zabójcą wydajności. Typowym obejściem jest wykonanie UNION . Na przykład:

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

Jeśli jesteś pewien, że nie ma duplikatów, zmień na szybsze UNION ALL .

Jeśli nie łapiesz brakujących team_users wierszy, użyj JOIN zamiast LEFT JOIN .

Jeśli potrzebujesz ORDER BY , dodaj kilka nawiasów:

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

W przeciwnym razie ORDER BY miałby zastosowanie tylko do drugiego SELECT . (Jeśli potrzebujesz również „paginacji”, zobacz mój blog .)

Pamiętaj, że możesz również potrzebować LIMIT w pewnych okolicznościach.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql Wybierz kilka losowych wierszy i plus jeden konkretny wiersz

  2. Rejestruj każde zapytanie MySQL w pliku, włączając opcję Logowanie ogólne w MAMP

  3. mysql_fetch_array, mysql_fetch_assoc, mysql_fetch_object

  4. Najlepszy sposób na wstawienie danych JSON do MYSQL

  5. SQL Random wiersze w dużej tabeli (z klauzulą ​​where)