Немного запутался когда ты говоришь "база". Ты имеешь ввиду "таблица"?
У тебя в одной таблице все пользователи, с колонкой "соц_сеть"?
И тебе нужно пробежаться по всем пользователям определенной соц сети, послать им оповещение (соц. сети API), и затем записать дату оповещения?
Я не совсем вижу вообще зачем тебе IN здесь.
Сортируешь по user_id (он не изменный и только увеличивается). И далее делаешь выборку например 128 пользователей, далее шлешь им оповещания и обновляешь им notification_date, при этом тут проще будет использовать user_id больше и меньше чем первый и последний в этом списке.
Затем делаешь снова ту же выборку, только уже с дополнительным условием: user_id > last_user_id - где last_user_id самый большой последний user_id. И повторяешь все те же операции как и раньше.
И так по циклу, пока возвратимый результат не вернет 0 записей.
Что-то типо (псевдокод)
var last_user_id = 0;
// repeat as long as there are users
while(true) {
// select batch of users
users = "SELECT users WHERE user_id > " + last_user_id + " AND social_network = 'vk' ORDER BY user_id ASC LIMIT 128";
// no more users left to notify
if (users.length === 0)
break;
// send notification
for(user in users)
send_notification(user)
// get first user_id and last user_id
var first_user_id = users[0].id;
last_user_id = users[users.length - 1].id;
// update notification date of users
"UPDATE users WHERE user_id >= " + first_user_id + " AND user_id <= " + last_user_id " SET notification_date = date";
}
Такой подход масштабируется с любым размером таблицы. Если больше записей будет, он всего лишь займет немного дольше времени.
Также увеличивая размер batch'а (128 в данном примере), ты больше заполнишь оперативки, но можешь быстрее обработать всю таблицу, снизив число запросов и парсинга.
Также такие вещи нужно писать не в блокируемом языке, с учетом того что send_notification может блокировать. Если он блокирует (PHP или Python), то у тебя этот скрипт займет ужасно много времени.
В идеале тебе нужно делать скрипт где send_notification выполняется паралельно с ограниченным числом.
Также лучше вообще параллелить батчи тоже, паралельно обрабатывая скажем 8 пачек по 128 пользователей.
В node.js такое легко параллелизуется, и будет очень шустро работать.