2012-10-14 81 views
0

我需要维护一个群发电子邮件发件人的应用程序。最后一名程序员干得不错,但老板觉得可以对数据库处理进行一些优化。当竞选结束后,报告会提供保存选定细分的选项。例如,我们发送50000封电子邮件,并且我们想要保存打开新闻简报的人群(2000年)。该工具现在创建了一个复制联系人的新段(使用INSERT),但我认为我们可以通过保存每个联系人的ID。SQL IN语句的限制

我想知道如果保存与SQL IN语句的联系人会增加工具的性能,或者有另一种方法来执行此操作。喜欢的东西:

  1. 创建联系人的ID列表SELECT * FROM接触

  2. SELECT * FROM接触WHERE idContact IN(all_contacts_comma_separated) - >我要救 这

在此先感谢

PD:这是一个生产环境,所以我需要确保在作出任何更改之前:-(

+3

我建议在做任何事情之前在开发沙箱中镜像生产环境。 – eggyal

+0

'例如,我们发送50000电子邮件'我真的希望这是完全非法和不可能 –

+0

嗨。这不是不可能的,我们只发送给双重选择的人,所以这不是非法的。然而,法律部分驻留在我的老板身上,我认为这已经足够了......否则我会尽快更换工作:-D –

回答

1

您没有说出当前打开电子邮件的人员列表所在的位置。如果它不在数据库中,您将使用什么代码/流程来生成您的IN声明列表?如果是在数据库里为什么不是JOIN你的表格得到的信息?

无论哪种方式,当列表中有2000个项目时,我不建议使用IN

它也可能是值得您阅读以下内容:

SQL Server: JOIN vs IN vs EXISTS - the logical difference

它与SQL服务器编写的主意(我不知道这一切直接应用到MySQL),但其概念是有趣的,您应该在改变您的生产环境之前执行测试,正如eggyal的评论所建议的那样。

+0

感谢您的回复。数据库驻留在另一个具有竞选结果的表中。从这里,我们可以获取我们需要的所有信息来执行报告。所以我认为我可以在这张桌子上加入以获取电子邮件。我将要求一个试生产环境来执行更改和测试结果。 –

+0

2000可能有点太多了,我会批量500-1000左右。您需要测试才能找到最佳尺寸。 –