加速新闻稿脚本的外连接查询

时间:2010-10-08 12:24:47

标签: php sql mysql

我有一个PHP脚本,可以向一堆电子邮件地址发送简报,每小时发送15000个简报,直到所有电子邮件地址都被处理完毕。

因为这个过程不是一次运行的,所以我有一张桌子可以记录所有邮寄过的地址,所以我总能轻松获得未发送的地址。

以下是我所做的简化示例:

 select a.* 
 from email_all a left outer join email_send s 
      on s.email_id = a.id 
      and s.mailing_id = 1 
 where s.id IS null 
 limit 0, 15000

因此,所有尚未邮寄的地址都被选中,现在的问题是,发送的简报越多,“email_send”表中记录的地址就越多,查询得到的速度就越慢。在一开始,'email_all'表中有50.000个地址,而'email_send'则没有,在我们的几个地址之后,'email_all'表中仍有50.000个地址,'email_send'中还有50.000个地址,然后全部地狱失败了。这些脚本适用于较小的邮件,例如10.000。

我在第二个表中的'email_id'列上放了一个索引,主键已经设置好了。

无论如何我可以加快速度吗?我也使用'NOT EXISTS IN',但这没有帮助:(

任何人都可以提供帮助吗?

THX !!

史蒂夫

2 个答案:

答案 0 :(得分:0)

你为什么不以相反的方式做出反应:

  • 使用您的队列创建一个大表
  • 删除发送的表格中的每一行

答案 1 :(得分:0)

请勿记录已在其他表中发送的电子邮件地址。只需在email_all表中创建另一个字段,发送tinyint(1),并在发送该用户的电子邮件时更新该字段。或者制作一个大型队列表,并在发送时从那里删除行。