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

Czy kolejność warunków w klauzuli WHERE wpływa na wydajność MySQL?

Oto demo pokazując kolejność warunków klauzuli WHERE może zrobić różnicę z powodu zwarcia. Uruchamia następujące zapytania:

-- query #1
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;

-- query #2
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;

Jedyną różnicą między nimi jest kolejność operandów w OR stan.

myslowfunction celowo śpi na sekundę i ma efekt uboczny polegający na dodawaniu wpisu do tabeli dziennika za każdym razem, gdy jest uruchamiany. Oto wyniki tego, co jest rejestrowane podczas uruchamiania dwóch zapytań:

myslowfunction called for query #1 with value 1
myslowfunction called for query #1 with value 2
myslowfunction called for query #2 with value 1
myslowfunction called for query #2 with value 2
myslowfunction called for query #2 with value 3
myslowfunction called for query #2 with value 4

Powyższe pokazuje, że powolna funkcja jest wykonywana więcej razy, gdy pojawia się po lewej stronie OR warunek, gdy drugi operand nie zawsze jest prawdziwy.

Więc IMO odpowiedź na pytanie:

to „Czasami może to zrobić”.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jQuery Sprawdź poprawność użycia metody zdalnej, aby sprawdzić, czy nazwa użytkownika już istnieje

  2. Tworzenie zestawu MySQL SET z ciągu znaków

  3. Najczęstsze zapytania dotyczące MySQL

  4. 3 sposoby na „odheksowanie” ciągu w MySQL

  5. Jak strony podróżnicze zamykają pokój?