SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.06.2012 17:27:57

danisimo
Участник
Откуда: Донецк
Зарегистрирован: 25.06.2012
Сообщений: 2

Не работает Индекс при Left Join с двумя условиями

Привет всем. Странную вещь заметил в explain

Вот запрос

explain select * from cat_prices
left join partmakers on partmakers.mak_id=cat_prices.maker_id
left join dillers on id_dill=id_dop_diller or id_dill=diller_id
where cat_prices.cat_number='9091520003' and maker_id='149'


вот результат

id     select_type     table     type     possible_keys     key     key_len     ref     rows
1    SIMPLE    cat_prices    index_merge    maker_id_cat_number    maker_id_cat_number    152,156    NULL    11   
1    SIMPLE    partmakers    eq_ref    PRIMARY    PRIMARY    4    olimpiaauto.cat_prices.maker_id    1    
1    SIMPLE    dillers    ALL    PRIMARY,id_dill    NULL    NULL    NULL    908

То есть когда выполняется left join dillers, mysql проходится по всем 908 записям в таблице dillers, вместо того, чтобы воспользоваться индексом. Причем на каждый номер в условии where будет просмотрено 908 записей. Если номеров будет 100, то это лишние 90800 просмотров, что в итоге очень сказывается на производительности. Всё это, из-за того, что в условии on стоит 2 условия - id_dill=id_dop_diller or id_dill=diller_id . Если поставить просто id_dill=id_dop_diller или id_dill=diller_id то все хорошо, в колонке rows будет стоять 1, и ключ будет выбран, как и должно быть.

Странно еще что в possible_keys вроде есть ключи, но почему-то он не выбирает ни один из них. left join dillers use index (PRIMARY) так же не помогает.

Если кто-то сможет что-либо подсказать, буду благодарен.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson