加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在postgresql 8.3.7中的分区表上使用索引

发布时间:2020-12-13 16:05:22 所属栏目:百科 来源:网络整理
导读:我有这种情况,运行一个由分区表中的索引列过滤的查询,执行全表扫描. 显然,这是postgresql中的一个已知问题,详细解释了here. 除了对每个分区执行查询,然后对所有结果执行UNION之外,还有更优雅的方法吗? 解决方法 索引只能对PostgreSQL中的相关分区进行扫描.
我有这种情况,运行一个由分区表中的索引列过滤的查询,执行全表扫描.

显然,这是postgresql中的一个已知问题,详细解释了here.

除了对每个分区执行查询,然后对所有结果执行UNION之外,还有更优雅的方法吗?

解决方法

索引只能对PostgreSQL中的相关分区进行扫描.但是,你必须正确设置它才能工作,并且很容易错过在 http://www.postgresql.org/docs/current/static/ddl-partitioning.html记录的长列表中的一步

要实现的主要是,为了避免顺序扫描,您必须向PostgreSQL提供足够的信息,以便它可以证明某些分区不能拥有您正在寻找的数据;然后将它们作为查询结果的潜在来源跳过.您链接的文章指出这是seq扫描问题的解决方案:“如果您将范围约束添加到每个分区的日期字段,可以将此查询优化为循环,您首先查询”最新“分区并工作向后,直到找到一个高于所有剩余分区范围的值.“ – 但不会显示您在更改后看到的改进计划.

您可能犯过的一些常见错误:

– 默认情况下,postgresql.conf文件中的constraint_exclusion参数处于关闭状态.使用该默认值,您将无法获得预期的结果.

– 不要使用CHECK创建不重叠的分区,这样可以防止规划人员知道每个分区内部的内容.可能会错过这一步,但仍然可以将数据正确地分配到正确的分区中,规划人员就不会知道这一点.

-Did不在每个分区上放置索引,只在主表上创建一个索引.这将使您在相关??分区上进行顺序扫描,因此不会像上面那样糟糕但也不好.

在即将发布的PostgreSQL版本中,有一些工作可以使这一切变得更容易(在8.4中设置constraint_partition是相当自动的,并且正在使用某种分区设置自动化).现在,如果你仔细按照说明并避免所有这些问题,它应该工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读