sql - 希望使用 SQL 中的索引查找大型数据集中的重复项

标签 sql database indexing

我有一个包含用户和电子邮件的数据库。这是一个非常大的数据集,因此我正在寻找比简单的 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/

相关文章:

python - ndarray 上的任意一维切片(沿轴的元素) - NumPy

python - mysql 查询过滤器 LIKE 无法正常工作

C# guid 和 SQL uniqueidentifier

mysql全文搜索联合执行缓慢

mysql - 左连接 - 未知列错误 1054

tsql - SQL Server中索引的排序规则

MySql 查询排序

MYSQL join逗号分隔查询

Mysql - 如何从表 _a 中查询一行,该行链接到 table_b 指向 table_a 中的不同行

python - 带索引的字典理解