PostgreSQL 和查询计划器

1 postgresql optimization statistics

我对 PostgreSQL 中的查询计划器有疑问。我知道,这个规划器正在从 pg_statistics 获取数据,但是......谁能告诉我这个规划器是根据什么依据这些信息进行有效查询的?它是如何使用这些统计数据的?有没有比文档更好的描述整个过程?

我完全知道我的问题可能无法理解,但我真的不知道如何更容易地解释我的问题。如果您有问题,请提问。

小智 6

关于如何使用统计数据的最详细讨论是文档的行估计示例部分。最终,有关如何执行查询的所有信息都通过各种成本常量转化为一系列成本。因此,如果一个表的大小为 1000 页,并且统计数据表明它的 10% 将被提议的查询随机触及,那就是 100 页 * 4.0 (random_page_cost) = 400 个拉取数据的成本单位;然后使用其他常量来确定诸如这些页面中数据的处理成本之类的事情。

查询优化器尝试获取和组合各个组件的各种方法:不同的连接类型、访问表数据的不同方法等。它从这些组合中迭代可能的计划,然后选择执行总成本最低的计划。

我为我的书PostgreSQL 9.0 High Performance写了 50 多页关于这个主题的文章,该书目前对查询执行的讨论时间最长。除了文档中显示的内容之外,没有太多关于如何使用统计信息的内容。其中大部分内容涵盖了您可能遇到的所有各种查询计划节点元素。