资讯专栏INFORMATION COLUMN

Oracle2PG系列之分区索引与全局索引

IT那活儿 / 1543人阅读
Oracle2PG系列之分区索引与全局索引

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!





前  言



最近碰到个案例,某Oracle数据库迁移到PG的过程中,发现部分表的分区索引以及分区表的全局索引在PG中不支持,具体如下文所示。





分区索引



由于Oracle环境的软件设计问题,开发商使用了大量的序列,而这些序列字段往往也是标志性查询条件,DBA通常都会为这种序列字段创建索引,这里指btree索引。
由于序列值的递增性,导致总是btree索引页的最右侧页进行分裂,在入库高峰期这个索引分裂往往就是系统瓶颈,优化方式也较为简单,将该字段建立倒序、hash分区索引等等,这也是Oracle环境中的分区索引较多的原因,网上案例较多这里就不再展开。
Oracle分区索引示例:
图中创建tb_idxpart的普通表,i1字段进行hash打散到4个分区索引中,语法也相对简单。
笔者曾遇到过一个单表800G的索引失效案例,当时由于资源限制,创建普通索引耗时过长影响范围大,将该索引改造成分区索引后,逐个分区rebuild恢复正常。
示例如下:
分区索引能缩短索引创建时间、降低索引层数控制单分区容量以及降低争用等等好处,是一个很不错的功能,在最新的PG14中目前还不支持普通表的分区索引
PG语法树参考:




全局索引



一般来说,我们在使用分区表时,都建议将索引同样建成local分区索引,上文说的普通表的分区索引好处这里同样有效,有一种情况需要注意,比如电话信息表,以城市作为分区键,其中电话号码字段为主键或唯一键以保证电话号码生成的唯一性。如下:
图中当我们在城市340中生成18299999999后,再次在其它城市生成18299999999时, 提示号码已存在无法生成。而在PG数据库中,其只支持联合分区键的主键或唯一键,具体如下:
可以看到创建唯一索引时,提示必须包含分区键,按提示联合分区键进行唯一索引创建。
测试在不同的城市生成了相同的电话号码,这肯定是不合逻辑的。
原因是带分区键的联合唯一键或主键已经不是实际场景中需要的唯一键或主键,也就背离了约束初衷,目前最新的PG14中该问题还无法解决,需要在应用程序的逻辑层中解决,本文就到此为止。




本文作者:胡 杰

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129600.html

相关文章

  • 关于MySQL的知识点面试常见问题都在这里

    摘要:但是这将严重影响程序的性能。垂直分区的优点在于可以使得行数据变小,在查询时减少读取的数,减少次数。此外,垂直分区可以简化表的结构,易于维护。垂直分区的缺点在于主键会出现冗余,需要管理冗余列,并会引起操作,可以通过在应用层进行来解决。 Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Jav...

    LeoHsiun 评论0 收藏0
  • Amazon DynamoDB 入门5:索引创建及管理

    摘要:上一节我们介绍了项目的添加修改获取删除操作,这一节将介绍索引的创建及管理。创建索引在关系数据库中,索引是一个数据结构,可对表中的不同的列执行快速查询。但是,全局二级索引仅支持最终一致性。无论使用的是关系数据库还是,在创建索引时都应谨慎。 上一节我们介绍了项目的添加、修改、获取、删除(CRUD)操作,这一节将介绍索引的创建及管理。 创建索引 在关系数据库中,索引是一个数据结构,可对表中的...

    bitkylin 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<