Есть бд на 357751 строк, нужно сделать апдейт по всем строкам(UPDATE position SET allow = 'N' WHERE is_client IN ( 'Y', 'N' )). Изначально выполнялся за ~6.4 сек, убрав индекс allow, апдейт стал выполняться за 5.2 сек. Можно ли еще как то ускорить данный запрос? Таблица - MyISAM, индексов других аж 10 штук, но они не касаются полей которые в апдейте(allow я стер).
FanatPHP, индекс на is_client я не делал, потому что под условие попадают все строки (WHERE is_client IN ( 'Y', 'N' ) - не моя прихоть, это было в задании и возможно будет актуально позже, в любом случае даже есть все условие убрать время меняется на доли секунды, что не релевантно)
FanatPHP, все строки. Может есть какая нибудь теория хорошая, котьорую я могу почитать? Я излазил оф документацию и не нашел/возможно проглядел возможности изменить/оптимизировать запрос
собственно да
вместо многозначительных пассов руками и художественных описаний, в вопросе изначально надо приводить конкретную информацию
в частности, структуру таблицы, пример данных и цифры: количество найденных и количество обновленных строк
MilezNoles,
И да, зачем условие WHERE `is_client` IN ('Y','N'), мускулу тоже надо время на лишнюю выборку
Если можно так SET `allow`='N' WHERE `is_client`='Y'
В качестве эксперимента
UPDATE position SET allow = 'N' WHERE allow <> 'N' AND is_client IN ( 'Y', 'N' )
+ добавить спаренный индекс (allow, is_client)