【问题标题】:PostgreSQL Query Planner/Optimizer: Is there a way to get candidate plans?PostgreSQL Query Planner/Optimizer:有没有办法获得候选计划?
【发布时间】:2022-10-29 23:55:14
【问题描述】:

在 PostgreSQL 中,我们可以在查询上使用“EXPLAIN ANALYZE”来获取给定 SQL Query 的查询计划。虽然这很有用,但我们是否能够获得有关优化器生成(并随后丢弃)的其他候选计划的信息?

这样我们就可以自己对 DBMS 生成的一些候选(例如前 3 个)进行分析。

【问题讨论】:

    标签: postgresql query-optimization rdbms query-planner


    【解决方案1】:

    不会。计划者会尽早放弃初始计划,甚至在它们完全形成之前。一旦它决定一个计划不可能是最好的,它就永远不会完成它的构建,因此它无法显示它。

    您通常可以使用各种 enable_* 设置或 *_cost 设置来强制它做出不同的选择并为此显示计划,但很难准确控制不同的选择是什么。

    您还可以暂时删除一个索引,看看没有该索引会做什么。如果您在事务中 DROP 索引,然后执行 EXPLAIN,然后 ROLLBACK 事务,它将回滚 DROP INDEX,以便不需要重建索引,它只会被恢复。但请注意,DROP INDEX 会在表上采取强锁并保持它直到 ROLLBACK,因此这种方法并非完全没有后果。

    如果您只想查看其他计划是什么,您只需要 EXPLAIN,而不是 EXPLAIN ANALYZE。这更快,如果语句有副作用,也更安全。

    【讨论】:

      猜你喜欢
      • 2023-02-11
      • 2020-08-29
      • 2022-07-29
      • 2012-11-04
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多