【发布时间】:2010-10-18 18:42:41
【问题描述】:
我已经使用 SQL 多年了,但很少使用简单的插入和选择等...所以我不是 SQL 专家。我想知道是否可以帮助我优化我在 SQLite 上执行的更复杂的 SQL 语句,从 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 是典型的如何做到这一点的吗?
其次,我应该具备哪些指标才能使这项工作尽可能高效?
目前,在平均规格 LAMP 上处理大约 5000 条订阅者记录(和少数组)大约需要 30 秒。
归根结底,性能并不是那么关键,但我想更好地理解这些东西,因此非常感谢任何见解。
布拉德
【问题讨论】: