PostgreSQL涉及5000表Union的查询规划时间过多

问题描述 投票:0回答:1

我正在使用 PostgreSQL 数据库,其中有一个查询联合 5000 个具有相同结构的表。查询保存为视图。我注意到此查询的规划时间明显长于执行时间 — 规划时间约为 20 秒,而执行时间不到 1 秒。

这是我的查询的简化示例:

CREATE OR REPLACE VIEW my_view AS
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
-- ... (up to 5000 tables)
;

问题:

  • 为什么计划时间比执行时间长?
  • 有哪些优化技术可以减少规划时间?
  • 由于查询被保存为视图,在查询本身不改变的情况下,是否有办法缓存或跳过后续运行的计划过程?

任何见解或建议将不胜感激。

sql database postgresql union-all
1个回答
0
投票
  1. 分析结构并制定读取 5k 表的计划会占用一些 CPU,即使它们很简单且空。最终的计划很简单,我怀疑表格是简单、微小和空的组合,所以执行不是一个挑战。 演示1
  2. 将此视图设为
    materialized view
    以缓存结果:demo2。每当您想丢弃旧缓存时,请记住
    refresh materialized view
    。如果您希望它定期自动刷新,可以使用扩展。
  3. 参见上面第 2 点
© www.soinside.com 2019 - 2024. All rights reserved.