Sql 只运行一次昂贵的查询并从中返回多个结果
我有一个昂贵的查询,它从一个包含许多连接的查询中获取所有行。通过此查询,我需要返回两个结果:Sql 只运行一次昂贵的查询并从中返回多个结果,sql,postgresql,common-table-expression,Sql,Postgresql,Common Table Expression,我有一个昂贵的查询,它从一个包含许多连接的查询中获取所有行。通过此查询,我需要返回两个结果: 来自查询本身的所有数据,限制在n行 查询中特定列的不同值的数组 这两个操作使用完全相同的基本查询。我不想运行两次基本查询,因为它很昂贵,但我不想将其存储为表,因为在返回这两个操作之后,我不需要它,而且查询也经常发生。我使用CTE运行查询,然后将两个操作合并到同一个结果中。由于第二个操作列类型(postgres数组)与任何基本查询列类型都不相同,因此需要添加新的、大部分为空的列,这会带来一些问题。它看起来
这似乎应该是SQL中的一个常见问题。我是否误解了查询是如何优化的?您知道解决方案:创建一个临时表,然后将其删除
我不会说这是SQL中的常见问题,但SQL肯定支持它。你知道该怎么做。如果需要持久化结果,请使用临时表。您知道解决方案:创建一个临时表,然后将其删除 我不会说这是SQL中的常见问题,但SQL肯定支持它。你知道该怎么做。如果需要持久化结果,则使用临时表 我是否误解了查询是如何优化的 查询优化远远超出了作为候选解决方案公开的范围。 查询优化从分析查询速度慢的原因开始,为此,您需要回答以下问题:
- 你有正确的索引吗
- 你的数据更新了吗
- 你的where子句写得正确吗,这样它们才是可写的
- 您是否检查过其他类型优化的执行计划(检查您的联接、缺少的索引、统计数据)
- 你有正确的索引吗
- 你的数据更新了吗
- 你的where子句写得正确吗,这样它们才是可写的
- 您是否检查过其他类型优化的执行计划(检查您的联接、缺少的索引、统计数据)
在postgres中创建临时表
可能是最好的解决方案隐式规则!您甚至可以让PostgreSQL在事务结束时自动删除临时表。@LaurenzAlbe谢谢,在postgres中创建临时表
可能是最好的解决方案