У меня есть таблица 1 и таблица 2.
Таблица 1
PARTNUM - ID_BRAND
партнум является первичным ключом
id_brand индексируется
Таблица 2
ID_BRAND - BRAND_NAME
id_brand является первичным ключом
название бренда "проиндексировано"
Таблица 1 содержит 1 миллион записей, а таблица 2 содержит 1000 записей.
Я пытаюсь оптимизировать какой-то запрос с помощью EXPLAIN, и после большой попытки я зашел в тупик.
EXPLAIN
SELECT pm.partnum, pb.brand_name
FROM products_main AS pm
LEFT JOIN products_brands AS pb ON pm.id_brand=pb.id_brand
ORDER BY pb.brand ASC
LIMIT 0, 10
Запрос возвращает этот план выполнения:
ID, SELECT_TYPE, TABLE, TYPE, POSSIBLE_KEYS, KEY, KEY_LEN , REF, ROWS, EXTRA
1, SIMPLE, pm, range, PRIMARY, PRIMARY, 1, , 1000000, Using where; Using temporary; Using filesort
1, SIMPLE, pb, ref, PRIMARY, PRIMARY, 4, demo.pm.id_pbrand, 1,
Оптимизатор запросов MySQL показывает временную + файловую сортировку в плане выполнения.
Как я могу избежать этого?
"ЗЛО" в ЗАКАЗАТЬ на pb.brand ASC . Упорядочение по этому внешнему полю кажется узким местом ..