数据量10亿级别的数据库表,多行存储成一行、一列扩展成多列之数据优化及迁移方案(一)

问题背景:
原表设计如下,业务上是把登陆用户的商品以priority顺序方式列表显示,但是此列表显示非常慢。
create table t_origin
(
  user_id     varchar2(11),
  goods_id    varchar2(19),
  priority    number(2),
  update_time DATE     
);
comment on t_origin.user_id "用户ID";
comment on t_origin.goods_id "商品ID";
comment on t_origin.priority "商品优先级";
comment on t_origin.update_time "记录更新时间";


问题定位:
1.查询登陆用户商品列表,这个SQL查询业务上非常简单,表结构设计也很合理
2.导致SQL查询非常慢的根本原因是t_origin表数据量过大,接近10亿

解决问题:
1.优化SQL,该分区的建立分区,该索引的建立索引;
2.想办法减少t_origin表数据量;要减少t_origin数量,可以将goods_id列扩展成多列如:goods_id_01, goods_id_02, goods_id_03等;如果将goods_id列扩展成10列,则t_origin表数据量减为原先的10分之一。
     前提:每个用户的商品列表数目必须有最大值,如10、20等,如果用户的商品列表数没有最大值,则无法通过扩展列来减少数据量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值