10 个你不知道的 PostgreSQL 成果
planner 的预计镌汰了100倍! 让我们试着领略为什么产生这种环境。 选择性= 0.001 * 0.01 = 0.00001。 当它乘以我们在表中的行数即 10000000 时,我们获得 100。这就是 planner 对 100 的预计值的来历。 可是,这些列不是独立的,那么我们怎样奉告 planner ? 在 PostgreSQL 中建设统计信息 在 Postgres 10 之前,没有一种浅显的方法去汇报 planner 收罗捕获列之间相关的数据统计。可是, Postgres 10 有一个新特征正好办理了这个题目,可以行使 CREATE STATISTICS 来建设扩展统计的工具,汇报处事器去收罗这些故意思的相干列的特另外统计信息。 函数依靠统计 回到我们先前评估的题目,col2 的值仅仅是 col1/10 。在数据库的术语中,我们会说 col2 是函数依靠于 col1 ,也就是说,col1 的值足以抉择 col2 的值,而且不存在有两行数据拥有沟通的 col1 值的同时有差异的 col2 值。因此,在 col2 列上的第二个过滤筛选并没有移除任何行!可是,planner 捕获到了足够的统计信息去知道这件工作。 让我们来建设一个统计工具去捕捉这些列和运行说明(ANALYZE)所依靠的函数统计。
让我们来看看此刻的打算是怎么来的。
很好!让我们看一下对打算的丈量。
看这里,我们可以看到, Postgres 意识到 col1 完全抉择 col2 ,因此用系数1来捕捉这些信息。此刻,全部的查询都过滤这些列之后,打算将会获得更好的评估。 ndistinct 统计 函数依靠是你可以在列之间捕捉的一种相关。 你可以捕捉的另一种统计信息是一组列的差异值。 我们之前指出,planner 可以获取每列差异值的统计数字,但再次归并多列时,这些统计数据每每是错误的。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |