Задавайте вопросы, мы ответим
Вы не зашли.
Привет всем. Странную вещь заметил в 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) так же не помогает.
Если кто-то сможет что-либо подсказать, буду благодарен.
Неактивен