mysql - 大集合sql查询

标签 mysql ruby

我正在使用 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/

相关文章:

ruby-on-rails - Nokogiri gem 安装在 Capistrano 部署中失败

MySQL 在多个设备上检查上次更新时间

ruby-on-rails - 如果不存在,请将 https) 添加到 URL?

Java - MySql 存储过程 "No data - zero rows fetched, selected, or processed"

php - 通过用户名在 Laravel 中查找用户

ruby - RSpec 在带参数的方法上测试 ArgumentError

ruby 快速字符串子集分析

Ruby 字符串字符分块

PHP sql 查询 WHERE 值 = 0

mysql - 从其他表查询检查状态