От класса работы с базой или от модели в которой идет вызов в базу?
Вот мой запрос
Проанализировав таблицу t2 я понял что условие (t2.average > 0 OR t2.comments > 0) избыточно и можно сократить просто до t2.average > 0
но к сожалению это никак не ускорило запрос, он по прежнему выполняется более 2 сек.
тут уже можно форсировать индекс и вроде бы как вот оно,
но нет - запрос все так же выполняется более 2 сек. Форсирование никак не убыстряет запрос, все так и пляшет в районе 2,1 сек. Что с форсированием, что без.
Вы говорили, выбирается 200 полей, правда с JOIN
Но EXPLAIN говорит, что по каждому индексу найдено полтаблицы
Mysql решает, что быстрее всю таблицу считать, чем мудохаться с индексом
Покажите инфу по индексам второй таблицы
Я имел в виду что под условие попадет 230K примерно. Да, вы вероятно правы, мускуль решает что реально проще всю таблицу оббежать ибо индексы по двум полям выборки как раз по 30% таблицы примерно
STRAIGHT_JOIN делать так:
А что выводит
и
форсирование индекс при селекте только по второй таблице работает
если в Селекте звездочку заменить на id, то индекс начинает работать
Сбросьте весь запрос текстом
UPDATE xyfq1_professions AS t1
inner JOIN STRAIGHT_JOIN xyfq1_items AS t2
SET t1.average = t2.average, t1.comments = t2.comments
WHERE t1.item_id = t2.id and (t2.average > 0 OR t2.comments > 0)
Вот эксплейн селекта
Вот убрал Where
Вот с форсирование индекса (может не так форсирую?)