假设您有以下查询:
SELECT * FROM table1 WHERE table1.id IN (1, 2, 3, 4, 5, ..., 999999)
IN
子句中的项目数的合理最大值是多少?我正在使用Sphinx生成全文搜索结果并将ID插入MySQL查询。这是一种可以接受的方式吗?
答案 0 :(得分:13)
您还可以让IN子句获取查询结果,例如:
SELECT * FROM table1
WHERE table1.id IN
(
SELECT id from table2
)
这样,您就不需要生成包含所有可能值的文本字符串。
在mysql中,你应该可以在IN子句中放入任意数量的值,只能用“max_allowed_packet”的值来约束。
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_packet
答案 1 :(得分:1)
根据我的经验,第webview.loadData(html_code,"text/html",null);
条中的最大值为1000,
我的excel工作表中有1300的值,我将它们全部放入IN,MySQL仅返回1000。
答案 2 :(得分:0)
它看起来像是该主题的重复: https://stackoverflow.com/a/4275704/838712
在提供的答案中,很明显规范没有正式限制,而是取决于您的DBMS配置。
答案 3 :(得分: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) ...
也可以正常工作。