(Suponho que você quis digitar
ids.customer_id = customer.customer_id
e não customer_ids.customer_id) Sem o ORDER BY, o mysql pegou os primeiros 10 ids do tipo 10 (indexados), procurou o cliente por eles e pronto. (Observe que o LEFT JOIN aqui é realmente um INNER JOIN porque as condições de junção serão válidas apenas para linhas que tenham uma correspondência em ambas as tabelas)
Com o ORDER BY o mysql provavelmente está recuperando todos type=10 clientes, em seguida, classificando-os pelo primeiro nome para encontrar os 10 primeiros.
Você pode acelerar isso desnormalizando a tabela de clientes (copiar o tipo no registro do cliente) ou criando uma tabela de mapeamento para conter o
customer_id, name, type
tuplas. Em ambos os casos, adicione um índice em (type, name)
. Se estiver usando a tabela de mapeamento, use-a para fazer uma junção de três vias com clientes e IDs. Se type=10 for razoavelmente comum, você também poderá forçar a consulta a percorrer a tabela de clientes pelo nome e verificar o tipo de cada um com STRAIGHT JOIN. Não será tão rápido quanto um índice composto, mas será mais rápido do que puxar todas as partidas.
E como sugerido acima, execute um EXPLAIN em sua consulta para ver o plano de consulta que o mysql está usando.