我想向我的网站用户发送批量电子邮件,并且电子邮件将一次发送给 100k+ 用户。我想要实现的是记录我的mail()
函数调用,即,一旦将邮件发送给用户,就会在临时表中为该用户添加一个条目。如果我的服务器崩溃,这对我有帮助,然后我可以将电子邮件发送给其他用户。
这是我的问题:
我从记录所在的用户表中选择记录NOT IN (select sent_ids from temp_table)
如果发送的ID很多,比如说70%的用户,那么查询会比较慢。
我能做些什么来解决我的问题?
我想向我的网站用户发送批量电子邮件,并且电子邮件将一次发送给 100k+ 用户。我想要实现的是记录我的mail()
函数调用,即,一旦将邮件发送给用户,就会在临时表中为该用户添加一个条目。如果我的服务器崩溃,这对我有帮助,然后我可以将电子邮件发送给其他用户。
这是我的问题:
我从记录所在的用户表中选择记录NOT IN (select sent_ids from temp_table)
如果发送的ID很多,比如说70%的用户,那么查询会比较慢。
我能做些什么来解决我的问题?
查看 mysql 中的EXIST
/NOT EXISTS
优化,文档。
它不应该比其他变体慢,因为在大多数情况下 MySQL 会尽可能优化 IN 子句(至少在以后的版本中)。但是,您可以尝试通过 id 左连接临时表,然后检查 sent_id IS NULL 以获取您尚未向其发送邮件的用户。
两种选择:
听起来像是外部联接的工作:
SELECT * FROM users u
LEFT JOIN temp_table t
ON u.id = t.id
WHERE t.id IS NULL
这将列出所有尚未发送电子邮件的用户。