(Předpokládám, že jste chtěli zadat ids.customer_id = customer.customer_id
a nikoli customer_ids.customer_id)
Bez ORDER BY mysql popadl prvních 10 id typu 10 (indexováno), vyhledal je u zákazníka a bylo hotovo. (Všimněte si, že LEFT JOIN zde je skutečně INNER JOIN, protože podmínky spojení budou platit pouze pro řádky, které mají shodu v obou tabulkách)
S ORDER BY mysql pravděpodobně načítá vše type=10 zákazníků a poté je seřadí podle křestního jména a najde prvních 10.
Můžete to urychlit buď denormalizací tabulky zákazníků (zkopírujte typ do záznamu zákazníka) nebo vytvořením mapovací tabulky, která bude obsahovat customer_id, name, type
n-tice. V obou případech přidejte index na (type, name)
. Pokud používáte mapovací tabulku, použijte ji k provedení 3cestného spojení se zákazníky a id.
Pokud je typ=10 přiměřeně běžný, můžete také vynutit, aby dotaz prošel tabulkou zákazníků podle jména a zkontrolovat typ u každého pomocí STRAIGHT JOIN. Nebude to tak rychlé jako složený index, ale bude to rychlejší než stahování všech shod.
A jak je navrženo výše, spusťte EXPLAIN na svůj dotaz, abyste viděli plán dotazů, který mysql používá.