代码中的大型sql或语句或过滤器?

cbjzeqam  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(276)

假设我有一个大的ID数组,大约10000个条目长。每个id是一个由数字组成的唯一字符串,大约20个字符长。 ['438122955667406858', '427968416155041792', '427968416155041792', '387734570570743849'...] 我还有一个数据库表,其中id对应于数组中的id。表中的id不是唯一的,表中可以有多个id匹配的行,如下所示:

所以问题来了:10000个ID的数组被分成10个左右的进程,所以每个进程都有1000个唯一的ID。每个进程必须从包含20+k个条目的数据库中请求,其id位于进程的id共享中的任何行。
最后一个问题是,最好构造一个大型的[op.or]语句,让sql server来完成这项工作:

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();
    })
})
sqyvllje

sqyvllje1#

如果我正确理解了您的问题,那么您将工作拆分为1000个id集并没有节省任何东西。只需将所有感兴趣的ID放在一个数组中,然后执行以下操作就更简单了:

let result = await [model].findAll({
    where: {
        [Op.in]: [uuid, uuid, uuid, uuid, ...]
    }
});

后继运算符

相关问题