Prisma findMany与findUnique查询性能差异及SQL转换对比
Prisma findUnique 与 findMany 查询的性能差异及SQL转换分析
性能差异结论
因为id字段带有UNIQUE约束,这两个查询在PostgreSQL中不会有显著性能差异:
- 数据库会通过
id的唯一索引直接定位匹配的行,无论是否加LIMIT,执行计划本质完全一致 - 即使
findMany没有指定LIMIT,由于唯一约束的限制,最多只会返回1条数据,不会出现全表扫描或大量数据读取的情况
对应的SQL语句转换
findUnique 生成的SQL(简化后)
SELECT "public"."User".* FROM "public"."User" WHERE ("public"."User"."id" = $1 AND 1=1) LIMIT $2 OFFSET $3
其中:
1=1是Prisma生成SQL时的冗余拼接逻辑,PostgreSQL查询优化器会直接忽略这个恒成立条件,不影响执行效率LIMIT $2实际会被设为1,因为findUnique预期返回唯一匹配结果,主动限制返回行数
findMany 生成的SQL(简化后)
SELECT "public"."User".* FROM "public"."User" WHERE "public"."User"."id" = $1 OFFSET $2
- 没有
LIMIT约束,但受id唯一特性限制,查询结果最多仅1条 OFFSET $2默认值为0,除非显式指定偏移量
内容的提问来源于stack exchange,提问作者JackFrost
相关产品推荐
相关产品推荐

