PostgreSQL 索引虚拟列 - 表达式索引 - JOIN提速
背景 CASE: 使用虚拟索引,响应时间从2.3秒下降到0.3毫秒 业务系统在设计时,为了减少数据冗余,提升可读性,通常需要将不同的数据放到不同的表。 在查询时,通过多表JOIN来补齐需要查询或在过滤的内容。 比如这样的例子: 有两张表,分别有1千万和100万数据,当用户查询时,需要补齐那100万表中的某个...
背景 CASE: 使用虚拟索引,响应时间从2.3秒下降到0.3毫秒 业务系统在设计时,为了减少数据冗余,提升可读性,通常需要将不同的数据放到不同的表。 在查询时,通过多表JOIN来补齐需要查询或在过滤的内容。 比如这样的例子: 有两张表,分别有1千万和100万数据,当用户查询时,需要补齐那100万表中的某个...
背景 有些场景,用户会发现重建索引,索引比原来更小。 通常这种情况是索引字段乱序写入,导致索引频繁分裂,使得索引页并不是百分百填满。膨胀使然。 B-Tree索引 由于索引页中的数据是有序的,因此在乱序写入时,索引页可能出现分裂,分裂多了,空洞就会多起来(一页里面没有填满)。 例子 1、先建索引,乱序写入。...
背景 为了测试或验证需要,通常需要快速的构建测试数据。 PostgreSQL提供了一些非常有用的功能,可以帮助用户快速的构建测试数据。 有趣的功能 1、SRF 返回多条记录的函数。例如 ...
背景 pgbench是PostgreSQL软件包中的一款benchmark软件,纯C编码,效率高,压测方便。 内置TPC-B benchmark测试,同时支持自定义benchmark。 详细文档见 https://www.postgresql.org/docs/10/static/pgbench.html ...
背景 PostgreSQL是一款扩展能力极强的数据库,这也是PG可以深入各个垂直行业的原因。 PostgreSQL的开放式接口 已有非常多跟进自定义接口扩展出来的插件。 下面是自定义接口对应的文档。 1、自定义函数 https://www.postgresql.org/docs/10/static/xfu...
背景 Greenplum是一款MPP数据库产品,优势是优良的OLAP性能,支持多节点并行计算,实现PB级数据量的实时分析。 除了分析能力,数据写入吞吐也是Greenplum的重要指标,Greenplum支持从master节点写入,也支持从segment节点并行写入。 从segment并行加载的话,性能是线性提...
背景 在数据库中NULL值是指UNKNOWN的值,不存储任何值,在排序时,它排在有值的行前面还是后面通过语法来指定。 例如 -- 表示null排在有值行的前面 select * from tbl order by id nulls first; -- 表示null排在有值行的后面 selec...
背景 在很多业务系统中,为了定位问题、运营需要、分析需要或者其他需求,会在业务中设置埋点,记录用户的行为在业务系统中产生的日志,也叫FEED日志。 比如订单系统、在业务系统中环环相扣,从购物车、下单、付款、发货,收货(还有纠纷、退款等等),一笔订单通常会产生若干相关联的记录。 每个环节产生的属性可能是不一样的...
背景 电商的促销活动非常多,规则可能比较复杂,要薅羊毛的话,数学可能要比较好才行。因此也出现了大量的导购网站,比如SMZDM。 但是实际上电商里面也有类似的应用,可以智能的分析买家的需求,根据买家的需求、已有的券、购物车,向用户推荐凑单品。 凑单的需求,本质上是多个字段组合搜索的需求。 1、购物车总金额 ...
背景 Oracle的数据中,通过ROWID可以定位到一条记录,当记录没有发生行迁移时,ROWID是不变的,因此即使不使用PK,也能很好的定位到一条记录。 PostgreSQL中,也有行号,CTID,由BLOCK_ID和ITEM_ID组成,即哪个数据块的哪条记录。 但是PostgreSQL的引擎为多版本引擎,因...