繁体   English   中英

只运行一次昂贵的查询并从中返回多个结果

[英]Run expensive query only once and return multiple results from it

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

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

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

  1. 用基本查询创建临时表,查询两次返回两次操作,然后删除
  2. 分别运行这两个操作,从而两次运行基本查询。

这似乎应该是 SQL 中的常见问题。 我误解了查询是如何优化的吗?

您知道解决方案:创建一个临时表,然后将其删除。

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

我误解了查询是如何优化的吗?

查询优化远远超出了您作为候选解决方案公开的内容。 查询优化首先分析查询速度慢的原因,为此您需要回答一些问题:

  • 你有正确的索引吗?
  • 你的数据更新了吗?
  • 你是否正确地编写了你的​​ where 子句,以便它们是 Sagrable?
  • 您是否检查过其他类型优化的执行计划(检查您的连接、丢失的索引、统计信息)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM