Предположительно, вы получаете ошибку чаще, потому что теперь это гораздо более медленный запрос.
Опция &
на userflags
делает подзапрос нерасширяемым. Слова-флажки обычно не являются хорошим дизайном схемы, поскольку они требуют вычислений, которые побеждают индексацию. Если вы часто выполняете битовое тестирование, лучше использовать отдельные столбцы с небольшими типами данных (например, TINYINT
).
Если ваша схема работает так, как она выглядит, вы можете сделать это, используя простой JOIN, который обычно работает лучше, чем подзапросы:
DELETE sessions
FROM sessions
JOIN users ON users.userid=sessions.userid
WHERE sessions.lastactivity<1289594761 AND admin=1
AND (users.userflags&1048576)=0
(присоединяется к DELETE
- расширение не-ANSI SQL в MySQL.)