У меня есть таблица в базе данных PostgreSQL: temp
с 4 столбцами
(
id int,
campaign character varying,
sender character varying,
date_s date
)
с уже около 9 миллионов записей. На данный момент индексов нет.
Проблема в том, когда я пытаюсь сделать:
SELECT COUNT(*)
FROM temp
WHERE
id = $idmail and
campaign = '$variable_campaign' AND
date > '$date_c' "
в петле 100K.
Запрос не отвечает. (Я поставил неограниченное set_time_limit в PHP, иначе я получу ошибку 500 за 5 минут)
На самом деле цель всех этих запросов - получить список писем, на которые соответствующая кампания не была отправлена на текущей неделе.
У вас есть идеи, потому что я действительно не знаю, как это сделать!
Я могу делать временные файлы, если запросы не могут быть выполнены, но я предпочитаю иметь дело с базами данных, это чище!
Предположим, что есть mails
таблица с первичным ключом id
:
select id
from
temp t
right join
mails m using(id)
where
t.campaign = '$variable_campaign' and
t.date > '$date_c' and
t.id is null
Он вернет все не отправленные идентификаторы почты.