(Jeg antager, at du ville skrive ids.customer_id = customer.customer_id
og ikke customer_ids.customer_id)
Uden ORDER BY greb mysql de første 10 id'er af type 10 (indekseret), slog kunden op for dem, og var færdig. (Bemærk, at LEFT JOIN her virkelig er en INNER JOIN, fordi joinbetingelserne kun gælder for rækker, der har en match i begge tabeller)
Med ORDER BY henter mysql sandsynligvis alle type=10 kunder sorterer dem derefter efter fornavn for at finde de første 10.
Du kan fremskynde dette ved enten at denormalisere kundetabellen (kopier typen til kundeposten) eller oprette en tilknytningstabel til at indeholde customer_id, name, type
tupler. I begge tilfælde skal du tilføje et indeks på (type, name)
. Hvis du bruger kortlægningstabellen, skal du bruge den til at lave en 3-vejs joinforbindelse med kunder og id'er.
Hvis type=10 er rimeligt almindelig, kan du også tvinge forespørgslen til at gå i kundetabellen efter navn og kontrollere typen for hver med STRAIGHT JOIN. Det vil ikke være så hurtigt som et sammensat indeks, men det vil være hurtigere end at trække alle kampe op.
Og som foreslået ovenfor, kør en EXPLAIN på din forespørgsel for at se den forespørgselsplan, som mysql bruger.