Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 加快新闻稿脚本的外部联接查询_Php_Sql_Mysql - Fatal编程技术网

Php 加快新闻稿脚本的外部联接查询

Php 加快新闻稿脚本的外部联接查询,php,sql,mysql,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

我有一个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\u all”表中有50000个地址,而在“email\u send”表中没有地址,几天后,在“email\u all”表中还有50000个地址,在“email\u send”表中也有50000个地址,然后所有的地址都会丢失。这些脚本非常适用于较小的邮件,如10.000

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

还有什么我可以加快速度的吗?我也使用了“不存在于”,但这无助于:(

有人能帮忙吗

谢谢


史蒂夫

你为什么不反过来说呢:

  • 使用队列创建一个大表
  • 从发送数据的表中删除每一行

不要将已发送的电子邮件地址记录在其他表中。只需在email\u all表中创建另一个字段tinyint(1)发送,并在发送该用户的电子邮件时更新该字段。或者制作一个大型队列表,并在发送时删除其中的行。

好的,谢谢你们,创建该队列表听起来是个不错的主意,我会尝试的!!!Thx!!