У меня есть этот запрос:
UPDATE invitations SET added=added+1 WHERE chat_id NOT IN (SELECT * FROM (SELECT LEFT(name,14) AS chat_id FROM rules WHERE name LIKE '-%-credit' AND value< 1522744396) AS iner)
каждый раз, когда я выполняю его, он принимает как возраст, и он никогда не делает то, что я хочу, чтобы он делал. например, я запустил его сейчас, и до сих пор он занял 1600 секунд, и ничего не произошло. В шоу-списке дел я вижу, что он находится в состоянии "Отправка данных". Что случилось с этим запросом?
Правила таблицы имеют не более 100K строк, а внутренний запрос возвращается как строки 2K. результаты внутреннего запроса - это один столбец и похожи на: chat_id -1001167043635 -1001167043643...
когда я запускаю только внутренний запрос, он занимает около 0,007 секунды.
И таблица приглашений имеет 500K строк и выглядит так: user_id | chat_id | добавлено 55545323 | -1001167043635 | 23
было бы признательно, если вы скажете мне, что я сделал не так, и скажите, как это исправить.
Вы можете подумать, что подзапрос в NOT IN выполняется только один раз для всего запроса. Дело в том, что для каждой строки в OUTER QUERY, INNER QUERY будет выполняться один раз. Мы столкнулись с этим вопросом один раз. Проверьте с запросом mysql EXPLAIN.
Почему вы запускаете "Выбрать"? Внутренний выбор не заполняет ваш запрос?
Установили ли вы индекс в chat_id?