【DB吐槽大会】第32期 - PG 没有全局索引

简介: 大家好,这里是DB吐槽大会,第32期 - PG 没有全局索引

背景


1、产品的问题点

  • PG 没有全局索引

2、问题点背后涉及的技术原理

  • PG的索引支持到表级别, 如果是分区表那么每个分区创建对应索引, 不能针对分区表建立全局索引.

3、这个问题将影响哪些行业以及业务场景

  • 使用了分区表, 且希望对非分区字段进行全局唯一约束的场景.
  • 分区表只能选择一种分区键, 如果要约束唯一性, 必须包含分区键, 例如ID, 那么可以设置ID唯一, 或者(ID, col1)唯一, 但是不能设置col1唯一.
  • 使用了分区表, 并且在非分区字段有排序需求, 即使支持了merge sort还是觉得不够的用户. 必须最高速度从全局索引拿到结果.

4、会导致什么问题?

  • 无法支持非分区字段进行全局唯一约束的场景.
  • 对非分区字段排序, 即使每个分区上有对应索引, 也需要访问所有分区, 进行merge sort, 有一定性能影响.

5、业务上应该如何避免这个坑

  • 基本无解, 除非不使用分区表.

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题

7、数据库未来产品迭代如何修复这个坑

  • 希望内核层面支持分区表的全局索引



相关文章
|
数据管理 Devops 关系型数据库
NineData社区版正式上线,支持一键本地化部署!
3月10日,玖章算术正式发布NineData社区版,这是一款免费、一键安装的数据管理解决方案,支持本地化部署,保障数据隐私与合规。它包含数据库DevOps、数据复制和数据库对比三大核心功能,适用于MySQL、PostgreSQL和Doris等数据库的数据迁移。基于Docker技术,用户可通过简单命令完成安装,特别适合内网环境及中小企业使用,助力高效的数据管理和成本控制。
1335 1
|
SQL 关系型数据库 数据库
一文熟悉PolarDB-PG 分区表核心特性
在 PolarDB-PG 数据库中,分区表 (Partitioned Table) 使您能够将非常大的表分解为更小且更易于管理的部分,这个部分称为分区 (Partition) 。 每个分区都是一个独立的对象,具有自己的名称和可选的存储特性。本文首先简单的介绍了分区表策略以及它的优势特点,然后介绍了PolarDB-PG 分区表支持的查询优化特性,最后介绍了分区表上的本地索引和全局索引,从而帮助用户对PolarDB-PG 分区表有一个全面的了解。
|
关系型数据库 数据库 PostgreSQL
POSTGRESQL中时间戳的奥秘timestamptz
探索 PostgreSQL 中的时间戳类型:timestamp 代表无时区的时间点,而 timestamptz 包含时区信息,可转换。了解它们的区别对于数据库操作至关重要。使用 `AT TIME ZONE` 关键字可实现两者间的转换。关注木头左,获取更多数据库知识!
POSTGRESQL中时间戳的奥秘timestamptz
|
存储 关系型数据库 MySQL
MySQL删除数据 文件大小不变的原因以及处理空洞问题
总之,MySQL中删除数据后文件大小不变的现象是由于InnoDB存储引擎的设计决策,旨在优化性能和空间的重用。处理这一问题需要综合考量数据库的使用场景以及可能的性能影响,选择合适的策略
1783 6
|
存储 NoSQL JavaScript
mongodb时间处理,时区处理
mongodb时间处理,时区处理
4607 2
|
Web App开发 负载均衡 API
ZLMediakit-集群部署
ZLMediakit-集群部署
2109 0