我一直在使用SQL多年,但很少有更多的简单插入和选择等......所以我不是SQL专家。我想知道是否可以通过PDO优化我在SQLite上执行的更复杂的SQL语句,从而获得一些帮助。SQLite优化多选插入
该声明似乎工作正常,似乎需要更长的时间,我会预期(或许我只是期待太多)。
这是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秒才能在平均规格LAMP上获得大约5000个用户记录(以及少数几组)。
在一天结束时,表现并不是那么重要,但我想更好地理解这个东西,所以任何见解都非常感谢。
布拉德
谢谢马特,那太好了。你的第一个解决方案从30秒减少到5或6,这足够好。我没有尝试第二种选择,因为我不太了解它,但是如果它成为问题,我会记住它。再次感谢 – 2009-04-10 23:52:00