了解Postgresql中的EXPLAIN函数

时间:2015-10-10 16:49:20

标签: postgresql explain

试图理解EXPLAIN函数 - 我有两个查询 - 第一个查询被优化,即运行600毫秒(我有100k行),第二个查询运行900毫秒 但是,当我运行EXPLAIN ANALYZE - 第一个查询,快速运行显示我的成本 - 64296和第二个查询,运行缓慢显示我的成本 - 20873 无法理解为什么更快的查询成本更高,以及为什么更长时间运行的查询成本更低。 有人可以给我一些提示吗?

2 个答案:

答案 0 :(得分:0)

PostgreSQL EXPLAIN是一种真正拥有大量武器和动物的动物。腿,每一个都可以使它以一种起初不易理解的方式工作。

要回答你的问题,我理解虽然运行第一个查询Q1(而不是EXPLAIN),但运行速度比第二个(Q2)快,但当你执行EXPLAIN ANALYSE时,实际上是Q1成本较高。

我想到了目前浮现在脑海中的两个原因:

  • 如果查询是LIMIT查询,那么Q1可能会更快地执行并且仍然具有更高的“成本”,因为PostgreSQL Planner(有意)不计划更小的总成本,但成本更低所需的结果(在这种情况下,行数较少)。
  • 另一个原因可能是缓存可能会对您的时代造成严重破坏。你可以确认观察是否持续多次(3+)运行?

除了这些预感,如果您真的想深入了解EXPLAIN,建议您参考以下文章hereherehere

答案 1 :(得分:0)

成本是规划人员考虑执行查询所需的资源(I / O和CPU时间)。这只是一个估算,由数学模型计算。

在您的情况下,计划员错了,它选择了次优计划。它有时会发生。

为什么呢?可能有很多原因。也许统计数据不足(首先尝试为你的表运行analyze)。也许统计数据没问题,但规划人员使用了错误的模型(例如,您的查询中可能存在已知存在问题的相关谓词)。也许您的查询超过了几十个表,而计划员无法完成所有可能的计划。等等。