PostgreSQL Oracle 兼容性之 - INDEX SKIP SCAN (递归查询变态优化) 非驱动列索引扫描优化
背景 对于输入条件在复合索引中为非驱动列的,如何高效的利用索引扫描? 在Oracle中可以使用index skip scan来实现这类CASE的高效扫描: INDEX跳跃扫描一般用在WHERE条件里面没有使用到引导列,但是用到了引导列以外的其他列,并且引导列的DISTINCT值较少的情况。 在这种情况下,数...
背景 对于输入条件在复合索引中为非驱动列的,如何高效的利用索引扫描? 在Oracle中可以使用index skip scan来实现这类CASE的高效扫描: INDEX跳跃扫描一般用在WHERE条件里面没有使用到引导列,但是用到了引导列以外的其他列,并且引导列的DISTINCT值较少的情况。 在这种情况下,数...
背景 Oracle中有一个dbms_sql的包,可以让你在存储过程的动态SQL中使用prepared statement。如果动态SQL的调用频次较高,硬解析可能导致一些性能问题(Oracle硬解析的CPU消耗还是蛮大的)。 https://docs.oracle.com/cd/B19306_01/appdev...
背景 LLVM对大量数据运算(比如说where条件中过滤大量的数据,聚合计算大量的数据等)的效率提升非常的明显。 原理参考 《分析加速引擎黑科技 - LLVM、列存、多核并行、算子复用 大联姻 - 一起来开启PostgreSQL的百宝箱》 PostgreSQL 11的JIT接口正在进行打磨,完善。借助L...
背景 http://www.idcquan.com/Special/OSCAR2018/index.html 由中国信息通信研究院主办、中国通信标准化协会支持的”OSCAR云计算开源产业大会”于2018年3月21日-22日在国家会议中心举行。 非常有幸获得了“OSCAR尖峰开源人物”奖项。 奖项不敢自居...
背景 并行聚合原理请参考: 《PostgreSQL 10 自定义并行计算聚合函数的原理与实践 - (含array_agg合并多个数组为单个一元数组的例子)》 实际上PostgreSQL支持并行计算后,聚合就分为多阶段聚合与原始的一阶段聚合两种玩法。 多阶段聚合会将聚合任务分配给所有的WORKER执行,然后再...
背景 通过增加虚拟字段,可以让数据库根据虚拟列的定义,自动填充值。 与自增,DEFAULT不同的是,虚拟列中可以从其他列的内容产生。 例如 CREATE TABLE t1 ( ..., height_cm numeric, height_in numeric GENE...
背景 OFFSE limit是分页常用的功能。很多人可能有过这样的感受,分页越到后面越慢。 实际上原因是由于数据库在OFFSET指定记录数之前,是需要扫过这么多的符合条件的TUPLE才能知道应该从哪里开始返回。 比如 1、索引扫描时,并不知道一个索引页有多少条有效记录(因为索引中没有版本号,需要回表才知道这...
背景 当数据量较大时,对数据分区是一种比较不错的数据管理手段。 每个分区都有对应的边界定义,在PostgreSQL中我们可以把它理解为分区的constraint。 目前PostgreSQL在优化器的细节方面进行打磨,constraint可以被优化器利用来做一些优化的工作。 1、例如: 每个班级一个分区,你...
背景 PostgreSQL 并行计算开始在细节方面进行打磨,例如11已添加了JOIN的分区并行,当两个分区表的分区定义一致时,在分区字段上JOIN就可以用到分区与分区之间直接并行JOIN,而不需要将数据APPEND后在JOIN。 《PostgreSQL 11 preview - 分区表智能并行JOIN (已类似...
背景 https://postgrespro.com/docs/postgrespro/10/jsquery digoal’s 大量PostgreSQL文章入口