我有一个包含用户和电子邮件的数据库。这是一个非常大的数据集,因此我正在寻找比简单的 SELECT 语句更快的方法。我只是想查找哪些用户列出了多个电子邮件地址。我相信我必须这样开始:
CREATE INDEX IX_MyDatabase_Emails
ON MyDatabase (Email ASC)
但说实话,我对索引很陌生,而且我的 SQL 很生疏,所以不太确定之后该做什么。
最佳答案
如果您想计算电子邮件地址,那么聚合是最快的方法。如果您想开始吐出具有重复项的电子邮件,那么在许多数据库中,以下操作会更快:
select uet.user
from user_email_table uet
where exists (select 1
from user_email_table uet2
where uet2.user = uet.user and uet2.email <> uet2.email
);
为了提高性能,您需要在 user_email_table(user, email)
上建立索引。
这将返回重复项。 select unique
将增加处理时间。
通过“多个”电子邮件地址,我假设您需要不同的电子邮件地址。这是这两个查询之间的区别:
select user, count(*)
from user_email_table
group by user
having count(*) > 1;
和:
select user, count(distinct email)
from user_email_table
group by user
having count(distinct email) > 1;
关于sql - 希望使用 SQL 中的索引查找大型数据集中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26574859/