21

假设您有以下查询:

SELECT * FROM table1 WHERE table1.id IN (1, 2, 3, 4, 5, ..., 999999)

条款中项目数量的合理最大值是多少IN?我正在使用 Sphinx 生成全文搜索结果并将 ID 插入 MySQL 查询。这是一种可接受的方式吗?

4

4 回答 4

20

您还可以让 IN 子句获取查询结果,例如:

SELECT * FROM table1 
WHERE table1.id IN 
    (
   SELECT id from table2
    )

这样,您不需要生成包含所有可能值的文本字符串。

在 mysql 中,您应该能够在 IN 子句中放入任意数量的值,仅受“max_allowed_pa​​cket”值的约束。

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html #sysvar_max_allowed_pa​​cket

于 2012-10-01T01:18:12.150 回答
0

MariaDB(在我的例子中是 10.3.22)在创建物化临时表之前对 IN() 有 999 个参数的限制,这可能导致执行时间更长。取决于你的指数。我还没有找到控制这种行为的方法。MySQL 5.6.27 没有这个限制,至少没有~1000 个参数。MySQL 5.7 很可能具有相同的“功能”。

我最终做了一系列,where id = a or id = b ...但通过使用一系列where id in(a, b) or id in(c, d) ....

于 2020-08-25T06:45:12.567 回答
0

它看起来像这个主题的副本: https ://stackoverflow.com/a/4275704/838712

在提供的答案中,很明显规范中没有官方限制,而是取决于您的 DBMS 配置。

于 2020-04-10T10:55:56.613 回答
-1

根据我的经验,子句中的最大值是 1000 个值IN ('1',....,'1000'),我的 excel 表中有 1300 个值,我将它们全部放入 IN ,MySQL 仅返回 1000 个。

于 2019-10-01T10:00:02.440 回答