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

原帖《请问表里面有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亿条数据的事实表在数据仓库中只能算小表


你可能感兴趣的:([数据库])