SELECT IN 用于大集合
在我的 Web 应用程序中,我想找出系统上已经存在 Twitter 上的哪些用户朋友...目前我正在做的是获取用户正在关注的 Twitter ID 列表(Twitter API 在以下位置返回 ID 5000):一次),并执行:
SELECT userId FROM users WHERE userId IN (COMMA_SEPARATED_LIST_OF_IDs);
我对此查询感到不舒服,因为随着用户表的增长,这可能会成为瓶颈。我也不想过早优化,那么还有其他方法可以做到这一点吗?
更新:我正在使用MySQL。
In my web application, I want to find out which of a user's friends on Twitter are already existing on the system... Currently what I am doing is getting the list of Twitter IDs the user is following (Twitter API returns the IDs 5000 at a time), and doing:
SELECT userId FROM users WHERE userId IN (COMMA_SEPARATED_LIST_OF_IDs);
I don't feel comfortable about this query, because as the users table grows, this might prove to be a bottle neck. I don't want to optimize prematurely either, so is there any other way I should be doing this?
Update: I am using MySQL.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
两种方法:
SELECT IN (expr)
能够为expr
提供一个SELECT
表达式。即数据库可以在这里处理大量数据。使用联接。
Two approaches:
SELECT IN (expr)
is able to have aSELECT
expression forexpr
. I.e. the database can handle a large amount of data here.Use a join.
您可以创建一个新表,并开始存储您的用户正在关注的所有 Twitter ID。然后,确定谁已经在您的系统中将是对索引列的简单连接。您可以自行决定使用 Twitter API 加载和更新该表。
You could create a new table, and begin storing all of the twitter id's that your users are following. Then, determining who is already in your system would be a simple join on indexed columns. You can use the Twitter API to load and update that table at your discretion.
我假设 users.userId 是您的主键。如果是这样,它就已经被索引了,所以查找应该已经是高效的了。您是否预计您的 COMMA_SEPARATED_LIST_OF_IDS 会超出合理范围增长?
I'm assuming that users.userId is your primary key. If so, it will already be indexed, so the lookup should already be efficient. Do you expect that your COMMA_SEPARATED_LIST_OF_IDS will grow beyond reason?
如果这是 Transact SQL,则可以使用 EXISTS 函数。我不确定 EXISTS 是否适用于其他数据库,因为我只在 SQL Server 中工作。
http://msdn.microsoft.com/en-us/library/ms188336。 ASPX
You can use the EXISTS function if this is Transact SQL. I'm not sure if EXISTS works in other databases because I only work in SQL Server.
http://msdn.microsoft.com/en-us/library/ms188336.aspx