从大型数据集中过滤掉记录的最佳方法是什么

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从大型数据集中过滤掉记录的最佳方法是什么相关的知识,希望对你有一定的参考价值。

我在一个表中有大约500,000个用户记录,另一个表包含被其他用户专门阻止的用户记录(即哪个用户阻止了哪个用户)。我使用以下查询来过滤当前用户的用户记录,该用户记录不包含被阻止的表中的被阻止用户。

SELECT * from demouser where id not in (select blockedid from demoblock where userid = 1 )

它很慢,大约需要2秒才能执行查询。是否有更有效的方法来过滤记录而不将500,000个用户记录与阻止表进行比较以从结果中删除被阻止的用户?

答案

我会把它写成not exists

select du.*
from demouser du
where not exists (select 1
                  from demoblock db
                  where db.blockedid = du.id and
                        db.userid = 1
                 );

对于此查询,您需要demoblock(blockedid, userid)上的索引。

另一答案

分别在iduserid列上创建索引,因此子查询和查询都将运行得更快。

另外,我建议稍作修改:

select * from demouser du
where not exists(select 1 from demouser
                 where blockedid = du.id
                   and userid = 1)
另一答案

假设您的demoblock表不包含大量数据,您可以尝试使用INNER JOIN。以下示例查询:

SELECT * FROM demouser INNER JOIN demoblock ON demouser.id=demoblock.id WHERE demoblock.id=1;

以上是关于从大型数据集中过滤掉记录的最佳方法是什么的主要内容,如果未能解决你的问题,请参考以下文章

从 SSIS 中加载的数据集中过滤掉重复项

在 Pandas 中加入两个大型数据集的最佳方法

在 BigQuery 中将大量数据从美国数据集迁移到欧盟数据集的最佳方法?

使用 Spark 过滤大型数据集中的列

在 python 中处理大型数据集的最佳方法

在 Javascript 中有效地逐步过滤大型数据集