(Zakładam, że chodziło Ci o wpisanie ids.customer_id = customer.customer_id
a nie customer_ids.customer_id)
Bez ORDER BY mysql pobrał pierwsze 10 identyfikatorów typu 10 (zindeksowanych), wyszukał ich klienta i skończył. (Zauważ, że LEFT JOIN tutaj jest tak naprawdę INNER JOIN, ponieważ warunki łączenia będą obowiązywać tylko dla wierszy, które pasują do obu tabel)
Z ORDER BY mysql prawdopodobnie pobiera wszystkie type=10 klientów, a następnie sortując ich według imion, aby znaleźć pierwszych 10.
Możesz to przyspieszyć, denormalizując tabelę klientów (skopiuj typ do rekordu klienta) lub tworząc tabelę mapowania do przechowywania customer_id, name, type
krotki. W obu przypadkach dodaj indeks do (type, name)
. Jeśli używasz tabeli mapowania, użyj jej do połączenia trójstronnego z klientami i identyfikatorami.
Jeśli typ=10 jest dość powszechny, możesz również wymusić, aby zapytanie przechodziło po tabeli klientów według nazwy i sprawdzało typ każdego z nich za pomocą STRAIGHT JOIN. Nie będzie tak szybki jak indeks złożony, ale będzie szybszy niż zbieranie wszystkich dopasowań.
Jak zasugerowano powyżej, uruchom polecenie EXPLAIN w swoim zapytaniu, aby zobaczyć plan zapytania, którego używa mysql.