运行 昂贵的查询只有一次并且 return 有多个结果

Run expensive query only once and return multiple results from it

我有一个昂贵的查询,它从具有许多联接的查询中获取所有行。通过此查询,我需要 return 两个结果:

  1. 查询本身的所有数据,限制在 n
  2. 查询中特定列的不同值数组。

这两个操作使用完全相同的基本查询。我不想 运行 两次基本查询,因为它很昂贵,但我不想将它存储为 table,因为在这两个操作完成后我不需要它returned 而且查询经常发生。我有一个 hack,我使用 CTE 来 运行 查询,然后将我的两个操作联合成相同的结果。这带来了一些问题,需要添加新的大部分为空的列,因为第二个操作列类型(postgres 数组)与任何基本查询列类型都不相同。它看起来也很hacky。似乎只有另外两个解决方案是:

  1. 用基础查询创建临时table,查询两次return两次操作,然后删除
  2. 运行 两个操作分开,因此 运行 基本查询两次。

这似乎应该是 SQL 中的一个常见问题。我是不是误解了查询的优化方式?

您知道解决方案:创建一个临时 table 然后删除它。

我不会说这是 SQL 中的常见问题,但 SQL 绝对支持它。你明白该怎么做。如果您需要保留结果,请使用临时 table.

Am I misunderstanding how queries are optimized?

查询优化远远超出了您作为候选解决方案公开的范围。 查询优化从分析您的查询为何缓慢开始,为此您需要回答一些问题:

  • 你有正确的地方索引吗?
  • 你的统计数据更新了吗?
  • 你的 where 子句写得正确吗?
  • 您是否检查过您的执行计划以进行其他类型的优化(检查您的联接、丢失的索引、统计信息)