从id列表中选择数千行的最有效方法

时间:2011-11-05 17:42:39

标签: mysql

是否有使用mysql IN或类似方法选择数千行的可扩展方法?

E.g。

SELECT * FROM awesomeTable WHERE id IN (1,2,3,4......100000)

这可能还是我只是在做梦? Schema是InnoDB,如果另一个提供更具可扩展性的解决方案,则可以更改。

作为参考,我从Solr返回的一组id中获取搜索结果。我想使用mysql进行最终检索,因为它会使这些结果的排序和最终过滤变得更加容易(我不会详细介绍原因)。

修改

只要IN仍然包含所有100000个ID,查询就可以使用LIMIT子句

E.g。

SELECT * FROM awesomeTable WHERE id IN (1,2,3,4......100000) LIMIT 10;

2 个答案:

答案 0 :(得分:1)

我是我,并不是真正了解您的框架,您应该尝试将这些ID插入临时表并使用此表与简单的内部联接。这可以证明和IN一样快。

答案 1 :(得分:0)

插入mysql表时我遇到了同样的问题。 可能的查询大小取决于您的mysql配置。

我的方法是将大ids集合分成若干部分。

使用Ruby on Rails:

all_ids.each_slice(10000) do |ids_part|
  query = "INSERT INTO ..."
end

也许这也可以是按ID选择行的解决方案。