我有一个包含用户和电子邮件的数据库。这是一个非常大的数据集,因此我寻找比简单SELECT语句更快的方法。我只想查找哪些用户列出了多个电子邮件地址。我相信我必须这样开始:
CREATE INDEX IX_MyDatabase_Emails
ON MyDatabase (Email ASC)
但说实话,我对索引很新,而且我的SQL很生疏,所以不太确定在那之后该做什么。
答案 0 :(得分:3)
如果您想计算电子邮件地址,那么汇总是最快的方式。如果你想开始吐出有重复的电子邮件,那么在许多数据库中,以下内容会更快:
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 distinct
会增加处理时间。
通过&#34;多个&#34;电子邮件地址,我假设你想要不同的电子邮件地址。这是这两个查询之间的区别:
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;
答案 1 :(得分:1)
SQL有两个方面。对表进行操作的语句(SELECT,UPDATE,DELETE和INSERT)。还有一些语句定义了数据的结构。
索引组织磁盘上的数据以提高select语句的速度。索引是定义数据结构的语句。通过查看您的陈述,您的索引应该是措辞:
CREATE INDEX IX_MyDatabase_Emails
On MyDatabase.user_email_table (Email ASC)
如果SELECT语句花费太长时间才能完成执行,那么索引将是一个很好的解决方案。您可能希望为用户创建索引,因为您正在寻找具有多个电子邮件地址的用户。
用于计算电子邮件地址的SELECT语句是:
SELECT user, COUNT(emails)
FROM user_email_table
GROUP BY user
HAVING COUNT(emails) > 1