2015-10-10 160 views
0

试图了解EXPLAIN功能 - 我有两个疑问 - 第一个查询优化,运行600毫秒(我有10万行)和第二查询正在运行900毫秒 但是当我运行EXPLAIN ANALYZE - 第一个查询,即快速运行,显示成本 - 64296,第二个查询,即运行速度慢,显示成本 - 20873 无法理解为什么更快的查询成本更高,以及为什么运行时间更长的查询成本更低。 有人可以给我一些提示吗?了解EXPLAIN功能在PostgreSQL

+1

可能是因为优化器感到困惑,并为第二个查询选择了错误的执行计划。 –

回答

0

PostgreSQL EXPLAIN是一种真正拥有大量武器的动物腿,每一条腿都可能导致其起初不易理解的方式工作。

要回答你的问题,据我了解,虽然运行第一个查询Q1(而不是它EXPLAIN),它的运行速度比第二(Q2)更快,但是当你做一个EXPLAIN ANALYSE,Q1实际上具有较高的性价比。

我能想到的,都在这一刻我想起两个原因:

  • 如果查询是LIMIT查询,其可能的Q1执行速度更快,而且还有较高的“成本”,因为PostgreSQL规划(有意)并不计划较小的总成本,而是所需结果的较小成本(在这种情况下,行数较少)。
  • 另一个原因可能是缓存可能会破坏你的时代。你能否确认观察是否持续多次(3+)运行?

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

0

成本就是计划者认为执行查询需要多少资源(I/O和CPU时间)。这只是一个估算,通过数学模型计算。

在你的案件策划师错了,它选择了不理想的计划。它有时会发生。

为什么?可能有很多原因。也许统计数据不足(首先尝试运行analyze)。也许统计数据是可以的,但规划人员使用错误的模型(例如,您可能在查询中存在已知有问题的相关谓词)。也许你的查询是在几十张桌子上,规划者不能完成所有可能的计划。等等。