我正在一个使用graphql和PostgreSQL的项目中,我们希望从数据库中选择一个在特定日期后具有值的数据。当前,它正在从数据库中选择所有数据,然后在服务器上对其进行过滤:
.filter(({time}) => moment(time).isAfter(startTime))
但是我认为最好在数据库查询中执行此过滤,因为永远不会使用完整的数据集。
在服务器上而不是在数据库查询中这样做有什么好处吗?
答案 0 :(得分:3)
除非出现某些特殊情况,例如后端代码的其他部分确实出于某些原因确实需要所有数据,否则通过 Postgres 过滤所有内容肯定会更有效首先用于获取数据的 SQL 。
这是有几个原因的:
我本人并未与 GraphQL 一起工作,但是通过对其文档进行一些摸索,看来 GraphQL 经常在不同的层中使用其他机制(外部数据库)以尝试提高性能。
值得一提的是,您的 GraphQL 查询正在生成的实际SQL是什么(可以通过 GraphQL 中的函数来实现;也可以通过在Postgres服务器上启用某些日志设置,并将日志输出与查询相关联)。如果您只想保留 GraphQL ,这可能会带来进一步的优化可能性。
跳到原始查询似乎很可能。当然,这是使用 Django 和 ActiveRecord 之类的ORM经常完成的事情。