在数据库上交叉检查用户列表 - 不好主意?

时间:2011-03-24 17:32:46

标签: sql ruby-on-rails database postgresql

让我们说。如果我在我的系统上注册了1,000,000个用户,并且我有500个名字的列表。

我想根据系统上的用户数量对这些名称进行交叉检查,以查看哪些名称/用户已在db上注册。

这样的过程会显着减慢应用程序的速度吗?或者这种事情是否一直在发生?

也许我可以每隔30分钟缓存一次结果,所以我不必每次都调用它。

编辑>>一点澄清:

我忘了提到我试图更新500个名字的名单。因此,如果'foobar'和'joe'在此列表中并且也在db中注册,那么我想要做的就是从列表中删除'foobar'和'joe',给我498个名字。

我不认为做这样的事情是合适的:

User.where('name in (?)', Array('foobar', 'joe'))

我会做类似的事情:

User.each do |registered_user|
  index = list.index(list.find{ |user| user.screen_name.downcase == registered_user.screen_name.downcase })
  list.delete_at(index) if index
end

filtered_list = list

上面的代码,是否过度?

2 个答案:

答案 0 :(得分:1)

任何现代关系数据库值得它的盐应该能够轻松地对数据库处理500次检查,而不会影响其他查询,提供您的表格结构正确(唯一键,索引)经常搜索的字段等)

答案 1 :(得分:0)

如果你聪明地做,它可以非常快。让数据库完成工作。

SELECT * FROM USERS WHERE Name IN ( <generated list of your 500 user name candidates>)

返回的列表将是数据库中已存在的500个列表。比如调用会很快,在慢速数据库上最多只需几秒钟。

干杯, 丹尼尔