《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(6) https://developer.aliyun.com/article/1228627?groupCode=polardbforpg
执行上述SQL语句,显示耗时2s+。
耗时没有改善的原因在于创建的两个聚簇索引存在严重的数据热点。
执行上述指令对order表进行索引散列,将customer_id=null的数据按照order_id的hash空间拆分为16个分区。
将customer_id=88的数据按照order_id的hash空间拆分为16个分区。对order_detail表执行同样的索引散列操作,拆分为15个分区。
查看热点散列后的分区情况,如上图,分区已经较为均匀。
执行上图SQL。结果显示并没有下推。因为前文热点散列时将两个表拆分为15个和16个分区,因此两个表不在一个表组中。
为了使两个索引组织到一个表组中,手动创建一个名为tg_idx_customer_id的表组,将orders索引的表组指定为tg_idx_customer_id,相当于更改了元数据,没有数据变动。然后执行alter table语句,按照tg_idx_customer_id的分区信息将order_detail索引表进行重新数据分布。
再次执行上图SQL语句,显示索引已经可以下推执行。查询执行耗时,显示为0.99s,相比次前节省约50%。
执行show full tablegroup,结果显示tg_idx_customer_id表组为显式创建,其中有两个索引表,分别是order.clustered_idx_customer和clustered_idx_custome_id_$058c,两个索引在一个表组中,因此可以执行关联查询并下推执行。