Я хочу отправить массовое письмо своим пользователям сайта, и электронное письмо будет отправлено, чтобы сказать 100k + пользователям за раз. То, что я хочу достичь, - это сохранить записи моих вызовов mail()
, т. Е. Как только почта будет отправлена пользователю, запись добавляется для этого пользователя во временную таблицу. Это помогает мне в состоянии, если мой сервер падает, тогда я могу отправить электронные письма остальным пользователям.Нужно оптимизировать MySQL-запрос для оператора IN
Вот моя проблема:
Я выбираю запись из таблицы пользователей, где записи NOT IN (select sent_ids from temp_table)
Если есть на количество переданных идентификаторов, скажем, 70% от общего числа пользователей, то это сделает запрос относительно медленный.
Что делать, чтобы решить мою проблему?
Я вижу, что большинство из вас предпочитает присоединиться, но мой коллега не согласен с этим. Он предпочел, чтобы максимальные электронные письма отправлялись до 10 раз в день, поэтому он думает, что мы должны добавить 10 столбцов для него в таблицу users. Поэтому, как только электронное письмо отправляется конкретному пользователю, его поле is_sent должно быть установлено в 1 для электронной почты (номер электронной почты дня, скажем, электронный номер 1). Считаете ли вы, что это самый быстрый способ, чем все другие решения? И должен ли я следовать этому или нет? –
Это пахнет плохим дизайном для меня, я, конечно же, не последую этому. Это сильно изнасиловает шаблоны проектирования баз данных ИМХО. И даже если бы это было быстрее, оно вводило много других проблем и проблем с возможностью перенастройки, это не стоит. –
Ну, он говорит, что проблема с IN заключается в том, что он столкнулся с проблемами сбоя сервера, потому что, как только записи слишком велики, запрос начинает задерживаться так долго, и сервер выходит из строя. Я в замешательстве: s –