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).