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

Opuściłeś JOIN szybciej czy Inner Join szybciej?

To zależy; uruchom je oba, aby się dowiedzieć; następnie uruchom opcję „wyjaśnij wybór”, aby uzyskać wyjaśnienie.

Rzeczywista różnica wydajności może wahać się od „praktycznie nieistniejącej” do „dość znaczącej” w zależności od tego, ile wierszy w A z id='12345' nie ma pasujących rekordów w B i C.

Aktualizacja (na podstawie opublikowanych planów zapytań)

Kiedy używasz INNER JOIN, nie ma znaczenia (pod względem wyników, a nie wydajności), od której tabeli zacząć, więc optymalizator próbuje wybrać tę, która według niego będzie działać najlepiej. Wygląda na to, że masz indeksy we wszystkich odpowiednich kolumnach PK / FK i albo nie masz indeksu w friend_events.userid lub jest zbyt wiele rekordów z userid = '13006' i nie jest używany; tak czy inaczej optymalizator wybiera tabelę z mniejszą liczbą wierszy jako „podstawową” — w tym przypadku jest to zcms_users .

Kiedy używasz LEFT JOIN, tak ma znaczenie (pod względem wyników), od której tabeli zacząć; zatem friend_events jest wybierany. Teraz dlaczego w ten sposób zajmuje to mniej czasu, nie jestem do końca pewien; Zgaduję friend_events.userid stan pomaga. Jeśli miałbyś dodać indeks (czy to naprawdę varchar, btw? nie numeryczny?), Twoje ZŁĄCZENIE WEWNĘTRZNE może zachowywać się inaczej (i stać się szybsze).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. transponuj kolumny do wierszy

  2. Szybka migracja bazy danych przy użyciu Talend

  3. najlepsze wózki na zakupy e-commerce dla programisty Zend Framework

  4. Jak zresetować zapomniane hasło roota MySQL?

  5. Jak zastąpić każdą inną instancję określonego znaku w ciągu MySQL?