我正在使用 ruby 在 MySQL 数据库上执行查询。我正在寻找 uid 的匹配项:
WHERE uid in #{VERY_LARGE_COMMA_SEPARATED_LIST}
VERY_LARGE_COMMA_SEPARATED_LIST 超过 30k 个条目
VERY_LARGE_COMMA_SEPARATED_LIST = ' "one","two","three",...,"30k" '
它会导致 sql 转储错误:
Mysql2::Error - MySQL server has gone away:
有人知道这是怎么回事吗?
最佳答案
您必须遍历典型的 1MB mysql SQL 命令缓冲区。
要解决您的问题,您应该创建(可能是临时的)表 uids
其中仅包含 uid,例如
CREATE TABLE uids (uid INT NOT NULL PRIMARY KEY);
(确保 uid
存在索引)。
然后用如下几条语句将必要的 uid 插入到 uids
表中:
INSERT INTO uids (uid) VALUES (1),(5),(10),..;
最后,运行您的查询:
WHERE uid IN (SELECT uid FROM uids)
或者像这样加入:
SELECT m.*
FROM master m, uids u
WHERE m.uid = u.uid
...
最后,您可能想要删除您的 uids
表。
编辑:我错过了您的 uid
不是整数。只需调整其定义以使用 VARCHAR
即可。
关于mysql - 大集合sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354366/