Firestore:通过文档ID直接获取比查询获取更快吗?
Firestore:按文档ID直接获取 vs 按ID字段查询的性能对比
直接通过文档ID获取(collection.doc(id).get())的速度肯定比按id字段查询更快,原因如下:
- 文档ID是Firestore的原生主键,直接调用
doc(id).get()是精准定位单个文档的操作,相当于直接寻址,服务端不需要执行索引匹配、结果筛选等额外步骤,网络请求和服务端处理的开销都极小。 - 而
collection.where('id', '==', id).get()属于查询操作,哪怕最终只返回一个文档,服务端也需要先匹配对应的索引(哪怕是自动创建的默认索引),再完成结果筛选,额外的索引查找流程会带来少量延迟。
你觉得直接方式耗时更长大概率是错觉,可能的影响因素包括:
- 单次测试的网络波动:比如某次请求刚好遇到网络拥堵、服务端临时负载高峰,导致耗时异常。
- 缓存差异:之前使用查询时可能命中了客户端或服务端的缓存,而改用直接获取时缓存未命中,首次请求的耗时会显得更高。
- 代码重构的附带变动:重构过程中可能不小心引入了其他额外逻辑(比如额外的日志、数据处理步骤),导致整体耗时增加,而非获取文档的操作本身。
建议你多进行几次重复测试,或者在代码中添加计时逻辑统计多次请求的平均耗时,这样能更准确地对比两种方式的性能差异。
内容的提问来源于stack exchange,提问作者Erwin
相关产品推荐
相关产品推荐

