带游标的Prisma分页速度慢

带游标的Prisma分页速度慢

我尝试过这两种方法(游标和偏移量)通过我的~1000 doc分页,但是,我不能让游标比偏移量更快。

代码语言:javascript复制// cursor method

const allDocs = []

let queryResults = await prismaClient.obsidian.findMany({

take: 100

})

while (queryResults.length > 0) {

allDocs.push(...queryResults)

queryResults = await prismaClient.obsidian.findMany({

take: 100,

skip: 1,

cursor: {

id: queryResults[queryResults.length - 1]!.id

}

})

}

return allDocs用~25秒完成(注:它似乎在使用OFFSET,我以为它不应该这么做?)

代码语言:javascript复制Query: SELECT "public"."obsidian"."id", "public"."obsidian"."doc", "public"."obsidian"."createdAt", "public"."obsidian"."updatedAt", "public"."obsidian"."filename" FROM "public"."obsidian", (SELECT "public"."obsidian"."id" AS "obsidian_id_0" FROM "public"."obsidian" WHERE ("public"."obsidian"."id") = ($1)) AS "order_cmp" WHERE "public"."obsidian"."id" >= "order_cmp"."obsidian_id_0" ORDER BY "public"."obsidian"."id" ASC LIMIT $2 **OFFSET** $3代码语言:javascript复制 // offset method

const count = await prismaClient.obsidian.count()

const pages = Math.ceil(count / 100)

const allDocsPromises = []

for (let i = 0; i < pages; i++) {

const page = prismaClient.obsidian.findMany({

skip: i * 100,

take: 100

})

allDocsPromises.push(page)

}

const allDocs = await Promise.all(allDocsPromises)

return _.flatten(allDocs)用~14秒完成。我的想法是,offset方法由于Promise.all()而运行得更快,但是是否有一种方法可以使光标分页以超快的速度返回所有文档?

相关作品

股票红绿代表什么?揭秘A股颜色密码与全球市场差异
流心月饼为什么不流心 流心月饼制作常见问题汇总
365bet正网盘口

流心月饼为什么不流心 流心月饼制作常见问题汇总

📅 07-14 👁️ 4857
全身发黄和眼睛发黄是什么原因
365bet如何提款

全身发黄和眼睛发黄是什么原因

📅 06-29 👁️ 5427