Hasura中两种主键查询方式的差异咨询
Hasura两种主键查询方式的差异对比
在PostgreSQL上用Hasura GraphQL API查询单条主键数据时,你提到的两种方式核心差异主要集中在以下几点:
1. 返回数据结构不同
- 主键查询对象(
authors_by_pk):返回单个对象,匹配到数据时直接返回{id:1, name:"xxx"},无匹配时返回nullquery { authors_by_pk(id: 1) { id name } } - where参数过滤方式:返回数组结构,哪怕只有一条匹配结果也是
[{id:1, name:"xxx"}],无匹配时返回空数组[]query { authors(where: {id: {_eq: 1}}) { id name } }
2. Schema类型定义有区别
authors_by_pk是Hasura针对主键自动生成的专属查询字段,Schema里明确它返回单个Author类型,消费方不用额外处理数组逻辑;而authors查询返回的是[Author]数组类型,必须手动取数组第一个元素才能拿到单条数据。
3. 语义与可读性差异
_by_pk的命名直接点明了「通过主键查询单条数据」的意图,其他开发者看代码时能立刻理解查询目的;where过滤的方式语义更通用,容易被误解为是筛选多条数据,可读性不如前者。
4. 性能细节(实际差异极小)
_by_pk是Hasura专门优化的主键查询入口,生成的SQL会直接命中主键索引;where过滤主键的方式虽然最终生成的SQL也会走索引,但属于通用列表查询的分支逻辑,不过实际运行时性能差异几乎可以忽略,只是前者更贴合主键查询的特定场景。
内容的提问来源于stack exchange,提问作者dantheman
相关产品推荐
相关产品推荐

