在MySQL中传递给IN()的最大项数是多少

时间:2011-06-20 03:03:52

标签: mysql sql

我获得了一堆ID(来自外部源)我需要与我们数据库中的ID进行交叉引用,并过滤掉那些介于某个日期之间的ID,并且还“启用”了一些其他参数。我可以通过以下方式轻松完成此任务:

SELECT * FROM `table` WHERE `id` IN (csv_list_of_external_ids) 
    AND (my other cross-reference parameters);

通过这样做,在所有传入的ID中,我将获得我想要的ID。但是,当外部ID数以千计时,这显然不是一种非常有效的方法。而且我不确定MySQL是否会支持这么大的查询。

鉴于没有任何内容可以缓存(因为用户数据和外部ID在每个查询中都发生了很大变化),并且这些查询至少每10秒发生一次。还有哪些其他SQL替代方案?

2 个答案:

答案 0 :(得分:3)

我认为唯一的限制是实际查询的长度,它由my.cnf文件中的“max_allowed_pa​​cket”参数控制。

答案 1 :(得分:0)

如果您将其表示为子查询:

SELECT * FROM table
WHERE id IN (SELECT ID FROM SOME_OTHER_TABLE)
AND ...

没有限制。