(Предполагам, че сте искали да въведете ids.customer_id = customer.customer_id
а не customer_ids.customer_id)
Без ORDER BY mysql грабна първите 10 идентификатора от тип 10 (индексирани), потърси клиента за тях и беше готово. (Имайте предвид, че ЛЯВОТО СЪЕДИНЯВАНЕ тук наистина е ВЪТРЕШНО СЪЕДИНЯВАНЕ, тъй като условията за свързване ще важат само за редове, които имат съвпадение и в двете таблици)
С ORDER BY mysql вероятно извлича всички type=10 клиенти, след което ги сортира по име, за да намери първите 10.
Можете да ускорите това, като денормализирате таблицата на клиентите (копирате типа в записа на клиента) или създадете таблица за съпоставяне, която да съдържа customer_id, name, type
кортежи. И в двата случая добавете индекс към (type, name)
. Ако използвате таблицата за съпоставяне, използвайте я, за да направите 3-посочно свързване с клиенти и идентификатори.
Ако тип=10 е сравнително често срещан, можете също така да принудите заявката да обхожда таблицата с клиенти по име и да проверява типа за всеки с STRAIGHT JOIN. Няма да е толкова бързо като съставен индекс, но ще бъде по-бързо от изтеглянето на всички съвпадения.
И както е предложено по-горе, изпълнете EXPLAIN на вашата заявка, за да видите плана на заявката, който mysql използва.