You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeORM配合PostgreSQL使用时findOne(id)是否比findOne({id})更快?

TypeORM 查询性能相关问题解答

给出的User实体定义如下:

@Entity()
class User {
  @PrimaryGeneratedColumn()
  id: string;

  @Column({
    type: 'varchar'
  })
  name: string;
}

问题1:调用usersRepository.findOne(id)的执行速度是否比usersRepository.findOne({ id })更快?

两者执行速度完全一致,没有性能差异。
直接传入id作为参数的写法是TypeORM提供的语法糖,底层会自动将入参转换为主键查询条件,最终生成的SQL语句和findOne({ id })完全相同,都是基于主键索引做查询,PostgreSQL的执行计划没有任何区别,因此执行速度一致。

问题2:由于name字段未建立索引,因此usersRepository.findOne(id)的执行速度会快于usersRepository.findOne({ name }),该推测是否正确?

该推测完全正确。

  • PostgreSQL会自动为实体的主键字段创建唯一B树索引,findOne(id)本质是走主键索引查询,时间复杂度为O(log n),查询效率极高。
  • 未给name字段建立索引的情况下,findOne({ name })会触发全表扫描,需要逐行匹配name字段的值,时间复杂度为O(n),表内数据量越大,查询速度比主键查询慢得越明显。

内容的提问来源于stack exchange,提问作者Michał Miler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:39:01