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

MySQL Czy istnieje limit InnerJoin?

Nie zbliżasz się do limitu JOIN dla MySQL. Twoja liczba sprzężeń nie jest zła. Jednak dołączanie do tabeli pochodnej (podkwerendy wewnętrznej) w trakcie wykonywania może powodować problemy z wydajnością, ponieważ tabele pochodne nie mają indeksów. Wykonywanie sprzężenia na tabeli pochodnej bez indeksów może być powolne.

Powinieneś rozważyć stworzenie prawdziwej tabeli tymczasowej z indeksami do łączenia lub znaleźć sposób na uniknięcie podzapytania.

JOIN w MySQL jest w zasadzie jak wyszukiwanie (szukanie) dla każdego połączonego wiersza. Tak więc MySQL będzie musiał wykonać wiele wyszukiwań, jeśli dołączasz do wielu rekordów. Mniej chodzi o liczbę dołączonych stołów, a raczej o liczbę dołączanych wierszy, co może stanowić problem.

W każdym razie MySQL wykona tylko tyle wyszukiwań, zanim się podda i po prostu przeczyta całą tabelę. Całkiem dobrze radzi sobie z decydowaniem, który będzie tańszy.

Być może najlepszą rzeczą, jaką możesz zrobić, to pomóc mu zgadywać, aktualizując statystyki indeksu za pomocą ANALYZE TABLE.

Możesz mieć jedną klauzulę WHERE na SELECT. Tak więc Twoje wewnętrzne podzapytanie będzie miało klauzulę WHERE, a zapytanie zewnętrzne będzie miało klauzulę WHERE, które zostaną zastosowane po JOIN (przynajmniej logicznie, chociaż MySQL zazwyczaj zastosuje je najpierw w celu zapewnienia wydajności).

Wszystko to przy założeniu, że wiesz, jak prawidłowo używać indeksów.



  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:Jak SUM() i TIMEDIFF() na grupie?

  2. Jakie jest najlepsze rozwiązanie do puli połączeń bazy danych w Pythonie?

  3. Jak opisać wszystkie tabele w bazie danych za pomocą jednej instrukcji?

  4. Czy muszę chronić się przed wstrzyknięciem SQL, jeśli korzystam z listy rozwijanej?

  5. MySQL — użycie COUNT(*) w klauzuli WHERE