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

Klauzula SQL IN wolniejsza niż pojedyncze zapytania

Jest to znany brak w MySQL.

Często jest prawdą, że użycie UNION działa lepiej niż zapytanie zakresowe, takie jak to, które pokazujesz. MySQL nie używa indeksów bardzo inteligentnie dla wyrażeń używających IN (...) . Podobna dziura istnieje w optymalizatorze dla wyrażeń logicznych z OR .

Zobacz http ://www.mysqlperformanceblog.com/2006/08/10/using-union-to-implement-loose-index-scan-to-mysql/ po pewne wyjaśnienia i szczegółowe testy porównawcze.

Optymalizator jest cały czas ulepszany. Braki w jednej wersji MySQL można poprawić w kolejnej wersji. Dlatego warto przetestować swoje zapytania w różnych wersjach.

Korzystne jest również użycie UNION ALL zamiast po prostu UNION . Oba zapytania używają tymczasowej tabeli do przechowywania wyników, ale różnica polega na tym, że UNION stosuje DISTINCT do zestawu wyników, co powoduje dodatkowe sortowanie bez indeksowania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd replikacji MySQL 2003

  2. przepisz ?id=__ do tytułu strony przechowywanego w wierszu db

  3. mysql ZAMIEŃ NA tylko niektóre pola

  4. Uzyskaj najczęściej powtarzające się podobne pola w bazie danych MySQL

  5. Funkcja MySQL COT() — zwraca cotangens liczby w MySQL