【DB吐槽大会】第62期 - PG 不支持index skip scan

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 大家好,这里是DB吐槽大会,第62期 - PG 不支持index skip scan

背景


1、产品的问题点

  • PG 不支持index skip scan

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

  • PG 的索引扫描方法仅支持index scan, index only scan, bitmap index scan.
  • index scan 为索引叶子节点链表顺序扫描.
  • index only scan与index scan类似, 只是某些情况下不需要回表.
  • bitmap index scan先汇总ctid的block id, 然后按block id顺序回表再recheck.
  • 以上扫描方法都不支持跳跃式扫描, 例如distinct gid, 即使GID字段有索引, 走索引扫描方法需要扫描整个索引才能得到distinct gid.
  • 并不能拿到1个GID后, 直接回到ROOT节点找大与上一个GID的下一个GID. 因此效率非常低.

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

  • 稀疏值的统计、去重. 例如在用户的行为日志中, 求某个时间段的活跃用户(count distinct uid)

4、会导致什么问题?

  • 性能较差

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

使用递归查询来解决这个问题:

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

  • SQL难度急剧增加, 一般开发者可能不会写递归SQL.
  • 如果是框架生成的SQL则无法改写. 导致性能差.

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

  • 希望引入index skip scan的功能, 直接在索引扫描层面解决, 而不是通过使用递归SQL来解决这个性能问题.

PostgreSQL 许愿链接

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
关系型数据库 数据库 PostgreSQL
【DB吐槽大会】第70期 - PG 不支持update | delete skip locked, nowait语法
大家好,这里是DB吐槽大会,第70期 - PG 不支持update | delete skip locked, nowait语法
|
消息中间件 SQL 关系型数据库
【DB吐槽大会】第69期 - PG 不支持update | delete limit语法
大家好,这里是DB吐槽大会,第69期 - PG 不支持update | delete limit语法
|
存储 算法 NoSQL
【DB吐槽大会】第19期 - PG 没有block level压缩
大家好,这里是DB吐槽大会,第19期 - PG 没有block level压缩
|
关系型数据库 数据库
【DB吐槽大会】第46期 - PG copy不能跳过错误行
大家好,这里是DB吐槽大会,第46期 - PG copy不能跳过错误行
|
存储 缓存 关系型数据库
【DB吐槽大会】第6期 - PG Double Cache
大家好,这里是DB吐槽大会,第6期 - PG Double Cache
|
SQL 存储 数据库
【DB吐槽大会】第10期 - 不支持 flashback query
大家好,这里是DB吐槽大会,第10期 - 不支持 flashback query
|
关系型数据库 数据库 索引
【DB吐槽大会】第32期 - PG 没有全局索引
大家好,这里是DB吐槽大会,第32期 - PG 没有全局索引
|
SQL 关系型数据库 数据库
【DB吐槽大会】第78期 - PG 不支持绕过shared buffer的查询和写入
大家好,这里是DB吐槽大会,第78期 - PG 不支持绕过shared buffer的查询和写入
|
SQL 关系型数据库 Java
【DB吐槽大会】第5期 - PG local memory
大家好,这里是DB吐槽大会,第5期 - PG local memory
|
存储 关系型数据库 物联网
【DB吐槽大会】第27期 - PG 单一 block size
大家好,这里是DB吐槽大会,第27期 - PG 单一 block size