Я использую SQL уже много лет, но редко что-либо большее, чем простые вставки, выбор и т. Д., Поэтому я не эксперт по SQL. Мне интересно, могу ли я получить некоторую помощь в оптимизации более сложного оператора SQL, который я выполняю на SQLite, от PHP до PDO.
Кажется, что утверждение работает правильно, просто кажется, что это займет больше времени, чем я ожидал (или, возможно, я просто ожидаю слишком многого).
Это SQL:
INSERT OR IGNORE INTO MailQueue(SubscriberID, TemplateID)
SELECT Subscribers.ID, '1' AS TemplateID
FROM Subscribers
INNER JOIN SubscriberGroups ON Subscribers.ID=SubscriberGroups.SubscriberID
WHERE SubscriberGroups.GroupID IN ('1', '2', '3')
AND Subscribers.ID NOT IN
(
SELECT Subscribers.ID FROM Subscribers
INNER JOIN SubscriberGroups ON Subscribers.ID=SubscriberGroups.SubscriberID
WHERE SubscriberGroups.GroupID IN ('4', '5', '6')
);
У меня есть список подписчиков в одной или нескольких группах. Я хочу добавить подписчиков в почтовую очередь, выбирая тех, которые принадлежат к одной или нескольким группам (1,2,3), но исключают тех, которые также входят в другой набор групп (4,5,6).
Во-первых, приведенный выше SQL типичен для этого?
Во-вторых, по каким признакам я должен сделать эту работу максимально эффективной?
В настоящее время требуется около 30 секунд, чтобы просмотреть около 5000 записей о подписчиках (и нескольких группах) в LAMP спецификации avg.
В конце концов, производительность не так уж критична, но я бы хотел лучше понять этот материал, чтобы любая оценка была высоко оценена.
Бред