试图理解EXPLAIN函数 - 我有两个查询 - 第一个查询被优化,即运行600毫秒(我有100k行),第二个查询运行900毫秒 但是,当我运行EXPLAIN ANALYZE - 第一个查询,快速运行显示我的成本 - 64296和第二个查询,运行缓慢显示我的成本 - 20873 无法理解为什么更快的查询成本更高,以及为什么更长时间运行的查询成本更低。 有人可以给我一些提示吗?
答案 0 :(得分:0)
PostgreSQL EXPLAIN
是一种真正拥有大量武器和动物的动物。腿,每一个都可以使它以一种起初不易理解的方式工作。
要回答你的问题,我理解虽然运行第一个查询Q1(而不是EXPLAIN
),但运行速度比第二个(Q2)快,但当你执行EXPLAIN ANALYSE
时,实际上是Q1成本较高。
我想到了目前浮现在脑海中的两个原因:
LIMIT
查询,那么Q1可能会更快地执行并且仍然具有更高的“成本”,因为PostgreSQL Planner(有意)不计划更小的总成本,但成本更低所需的结果(在这种情况下,行数较少)。答案 1 :(得分:0)
成本是规划人员考虑执行查询所需的资源(I / O和CPU时间)。这只是一个估算,由数学模型计算。
在您的情况下,计划员错了,它选择了次优计划。它有时会发生。
为什么呢?可能有很多原因。也许统计数据不足(首先尝试为你的表运行analyze
)。也许统计数据没问题,但规划人员使用了错误的模型(例如,您的查询中可能存在已知存在问题的相关谓词)。也许您的查询超过了几十个表,而计划员无法完成所有可能的计划。等等。