我需要维护群发电子邮件发件人的申请。最后一个程序员做得很好,但老板觉得可以对数据库处理做一点优化。当一个活动结束时,报告会提供保存所选片段的选项。例如,我们发送了50000封电子邮件,我们希望保存打开时事通讯的人群(2000)该工具现在创建了一个重复联系人的新部分(使用INSERT),但我认为我们可以通过保存来改进工具每个联系人的身份。
我想知道如果保存带有sql IN语句的联系人会增加工具的性能,或者还有另一种方法来执行此操作。类似的东西:
创建联系人SELECT * FROM contacts
SELECT * FROM contacts WHERE idContact IN(all_contacts_comma_separated) - >我会救 此
提前致谢
PD:这是一个生产环境,所以在做出任何改变之前我需要确定: - (答案 0 :(得分:1)
您没有说明当前打开电子邮件的人员名单所在的位置。如果它不在数据库中,您将使用哪个代码/进程来生成IN
语句列表?如果它在数据库中,为什么不JOIN
表来获取信息?
无论哪种方式,当列表中有2000个项目时,我都不建议使用IN
。
您可能还值得阅读以下内容:
SQL Server: JOIN vs IN vs EXISTS - the logical difference
它是用SQL服务器编写的(我不确定这一切是否直接适用于MySQL)但概念很有意思,你应该在更改生产环境之前进行测试,正如eggyal的评论建议的那样。