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

Wybierz zapytanie z trzema, gdy warunki są wolne, ale to samo zapytanie z dowolną kombinacją dwóch z trzech, gdy warunki są szybkie

Spróbuj podzielić istniejący SQL na dwie części i zobacz, jakie są czasy wykonania dla każdej z nich. Miejmy nadzieję, że dałoby to informację, która część jest odpowiedzialna za spowolnienie:

część 1:

SELECT table_1.id
  FROM table_1
  LEFT JOIN table_2
    ON (table_1.id = table_2.id)
 WHERE table_1.col_condition_1 = 0
   AND table_1.col_condition_2 NOT IN (3, 4)
   AND table_2.id is NULL

i część 2 (zwróć uwagę na sprzężenie wewnętrzne tutaj):

SELECT table_1.id
  FROM table_1
  JOIN table_2
    ON (table_1.id = table_2.id)
 WHERE table_1.col_condition_1 = 0
   AND table_1.col_condition_2 NOT IN (3, 4)
   AND table_1.date_col > table_2.date_col

Spodziewam się, że część 2 zajmie więcej czasu. Myślę, że w tym przypadku pomocny byłby indeks zarówno na table_1, jak i table_2 na date_coll.

Nie sądzę, aby indeks złożony w ogóle pomógł w wyborze.

To powiedziawszy, że trudno jest zdiagnozować, dlaczego te trzy warunki łącznie wpłynęłyby tak źle na wydajność. Wygląda na to, że ma to związek z dystrybucją danych. Nie jestem pewien co do mySql, ale w Oracle zbieranie statystyk na tych tabelach miałoby znaczenie.

Mam nadzieję, że to pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gdzie mogę znaleźć plik my.ini dla serwera Windows mysql?

  2. Jak sprawdzić w PHP, czy podano więcej parametrów PDO niż potrzeba?

  3. Nie można zalogować się za pomocą utworzonego użytkownika w mysql

  4. Powolne zapytanie podczas korzystania z ORDER BY

  5. Wybierz datę MySQL równą dzisiejszej