0

我需要维护大量电子邮件发件人的应用程序。最后一个程序员做的不错,但是老板觉得数据库处理上可以做一点优化。活动结束后,报告会提供保存所选片段的选项。例如,我们发送了 50000 封电子邮件,我们想要保存打开时事通讯 (2000) 的那部分人 该工具现在会创建一个复制联系人的新部分(带有 INSERT),但我认为我们可以通过保存来改进该工具每个联系人的 id。

我想知道使用 sql IN 语句保存联系人是否会提高工具的性能,或者还有另一种方法可以执行此操作。就像是:

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

  2. SELECT * FROM contacts WHERE idContact IN (all_contacts_comma_separated) --> 我会保存这个

提前致谢

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

4

1 回答 1

1

您没有说打开电子邮件的人员列表当前所在的位置。如果它不在数据库中,您将使用什么代码/过程来生成您的IN语句列表?如果它在数据库中,为什么不从JOIN你的表中获取信息?

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

您可能还需要阅读以下内容:

SQL Server:JOIN vs IN vs EXISTS - 逻辑差异

它是在考虑 SQL 服务器的情况下编写的(我不确定它是否都直接适用于 MySQL),但这些概念很有趣,您应该在更改生产环境之前执行测试,正如 eggyal 的评论所建议的那样。

于 2012-10-14T22:37:57.290 回答