【发布时间】:2018-04-27 14:42:03
【问题描述】:
假设我有大量的 ID,大约 10,000 个项目长。每个 ID 都是由数字组成的唯一字符串,长度约为 20 个字符。
['438122955667406858', '427968416155041792', '427968416155041792', '387734570570743849'...]
我还有一个数据库表,其中 ID 对应于数组中的 ID。表中的 ID 不是唯一的,表中可以有多个 ID 匹配的行,如下所示:
所以问题来了:10,000 个 ID 的数组被分配到 10 个左右的进程中,所以每个进程都有它自己的份额 ~1000 个唯一 ID。每个进程必须从包含 20+k 个条目的数据库中请求其 ID 在进程的 ID 份额中的任何行。
最后一个问题是,构造一个大的 [Op.or] 语句是否更好,让 SQL 服务器来完成工作:
table.findAll({
where: {
guild: {
[Op.or]: ThousandIDArray,
}
}
}).then(rows => rows.forEach(r => doSomething()))
或请求所有行,并按进程手动过滤?
table.findAll().then(rows => {
rows.forEach(r => {
if (ThousandIDArray.includes(r.guild)) doSomething();
})
})
【问题讨论】:
-
公会ID被索引了吗?
-
让db做处理;不要通过网络返回所有数据
-
@RaymondNijland 公会 id 在数据库或数组中都没有索引,它们的顺序和随机一样好。
标签: javascript mysql sql node.js sequelize.js