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

来源:互联网 发布:手机域名注册有什么用 编辑:程序博客网 时间:2024/06/06 02:37
问题背景:
原表设计如下,业务上是把登陆用户的商品以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等,如果用户的商品列表数没有最大值,则无法通过扩展列来减少数据量
原创粉丝点击