2010-08-04 71 views
3

在我的web应用程序中,我想知道哪些Twitter用户的朋友已经存在于系统中...目前我所做的是获取用户所在的Twitter ID列表以下特(Twitter API返回的ID 5000在时间),这样做的:SELECT IN for a large set

SELECT userId FROM users WHERE userId IN (COMMA_SEPARATED_LIST_OF_IDs); 

我觉得不舒服这个查询,因为表的增长的用户来说,这可能被证明是一个瓶颈。我不想过早优化,那么还有其他方法可以做到这一点吗?

更新:我正在使用MySQL。

+1

您使用的数据库是? – 2010-08-04 17:03:37

+0

你真的是指*多少*或你的意思是*哪个*? – 2010-08-04 17:06:14

+0

我的意思是,编辑了这个问题。 – jack33 2010-08-04 17:09:59

回答

2

您可以创建一个新表,并开始存储用户所关注的所有推特ID。然后,确定谁已经在您的系统中将是索引列上的简单连接。您可以使用Twitter API自行加载和更新该表。

+0

创建一个临时表,执行连接然后删除它比使用SELECT IN(expr)其中expr可能有多达5000个值更好的开销?我目前没有必要永久保留下表。 – jack33 2010-08-04 17:17:10

+0

我不建议在每次检查时都发生临时表选项,但欢迎您进行测试,看看它是如何执行的。虽然你不需要永久存储后续数据,但我认为你会发现没有什么理由不坚持它。 – Fosco 2010-08-04 17:27:01

3

两种方法:

  1. SELECT IN (expr)能够有一个SELECT表达式expr。即数据库可以在这里处理大量的数据。

  2. 使用连接。

1

我假设users.userId是您的主键。如果是这样,它已经被索引,所以查找应该已经很有效率。你期望你的COMMA_SEPARATED_LIST_OF_IDS会超越理性吗?

+0

Twitter会在5k批次中提供userIds,以防用户跟随超过5000人。所以,COMMA_SEPARATED_LIST_OF_IDS最多可以有5000个ID。 – jack33 2010-08-04 17:11:27