我应该在PostgreSQL或服务器后端中过滤数据吗?

时间:2019-07-12 04:12:40

标签: postgresql graphql

我正在一个使用graphql和PostgreSQL的项目中,我们希望从数据库中选择一个在特定日期后具有值的数据。当前,它正在从数据库中选择所有数据,然后在服务器上对其进行过滤:

.filter(({time}) => moment(time).isAfter(startTime))

但是我认为最好在数据库查询中执行此过滤,因为永远不会使用完整的数据集。

在服务器上而不是在数据库查询中这样做有什么好处吗?

1 个答案:

答案 0 :(得分:3)

除非出现某些特殊情况,例如后端代码的其他部分确实出于某些原因确实需要所有数据,否则通过 Postgres 过滤所有内容肯定会更有效首先用于获取数据的 SQL

这是有几个原因的:

  1. 假设表已正确索引,则筛选将能够在数据库中更快地进行。
  2. 不需要的数据将不需要序列化并通过电线发送到后端,只需通过后端自己的过滤将其丢弃。
  3. 由于只需要处理一部分结果,因此应该减少Postgres和服务器端的内存占用。

我本人并未与 GraphQL 一起工作,但是通过对其文档进行一些摸索,看来 GraphQL 经常在不同的层中使用其他机制(外部数据库)以尝试提高性能。

值得一提的是,您的 GraphQL 查询正在生成的实际SQL是什么(可以通过 GraphQL 中的函数来实现;也可以通过在Postgres服务器上启用某些日志设置,并将日志输出与查询相关联)。如果您只想保留 GraphQL ,这可能会带来进一步的优化可能性。

跳到原始查询似乎很可能。当然,这是使用 Django ActiveRecord 之类的ORM经常完成的事情。