您的位置:首页 > 其它

表里面有4亿条数据,如果做优化?

2011-03-11 10:27 176 查看
原帖《请问表里面有4亿条数据,如果做优化?》
http://topic.csdn.net/u/20110304/19/20f1737d-74ce-4546-9273-5861a022c301.html
问题:
数据库版本是db2 9.7。

表出入口T_CRK,数据量为4亿,并且每月都增加几百万。 结构大致如下:

ID 主键

CRRQ 日期

PLACE 地点

XNAME 姓名

....

还有其他的字段,但主要是这几个字段,查询的时候也一般是按照这几个条件查询,其中,日期是必选的查询条件,用户可以选择某一天也可以是某个时间段。姓名用户希望是模糊查询,地点总共有200个。

我是这样做的优化:

1、把原来的表改成分区表。按照日期的年份分区,既 一年 的数据是一个分区。

2、在日期上建立索引。后来想在日期上建立一个分区索引,一查才知道 db2 9.7 默认建立的就是分区索引。

3、在地点、姓名上建立了索引。

现在,查询条件为 等于某个日期的时候效率很高(<2s)。但是如果是一个时间段(一个月,一个月大约为几百万数据),就很慢,大约得1-2分钟。

如果在加上地点、姓名那就更慢了。最要命的是用户要求姓名模糊查询。

请大家指点一下。多谢!!

思路A:
中国人的姓名没几个字,人家想模糊查询,不如你加个字段,把关键的东西放进去,再给这个字段编个索引,界面上用户虽然用的是模糊,我们在后台把关键字拿出来用 = 而不是 like 去查索引。

思路B:
以2个月为单位建立分表 相当于数据归档 把当天的数据放在一张表临时表中,便于客户查询 建立索引 尽量在

where字句后加条件 注意从后往前过滤

思路C:
设计的时候就该给用户一个唯一ID,用ID号匹配,但是这个ID不是自增,可用一个分表记录ID号,方便迁移。

思路D:
综合下先建立表结构逻辑模型:

通过使用数据仓库建模思想建立星型模型:

1事实表

ID 主键

CRRQ_ID 日期ID

PLACE_ID 地点ID

XNAME_ID 姓名ID

XX 事实字段

2日期维表

CRRQ_ID 日期ID

CRRQ 日期

3地点维表

PLACE_ID 地点ID

PLACE 地点

4客户维表

XNAME_ID 姓名ID

XNAME 姓名

再利用DB2数据库的物理优化方法:

对事实表

1 数据库分区

2 表分区

3 建立MDC

4 建立 MQT

5 对联合主键建立位图索引

这样完全可以达到需求,4亿条数据的事实表在数据仓库中只能算小表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐