表里面有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亿条数据的事实表在数据仓库中只能算小表
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亿条数据的事实表在数据仓库中只能算小表
相关文章推荐
- 判断本地系统目录下是否存在XML文件,如果不存在就创建一个XMl文件,若存在就在里面执行添加数据
- 执行数据库查询时,如果要查询的数据有很多,假设有1000万条,用什么办法可以提高查询速率?在数据库方面或java代码方面有什么优化的方法
- 一个100万数据(MYSQL)的网站,目前访问速度慢,如果让你优化,你会从哪些方面进行考虑,谈谈你的思路
- VBA 从excel取数据到mdb里面,如果有重复则更新数据
- 如果在一个KeyFigure的Rule里面,使用另外一个KeyFigure的数据,如何实现?
- 一个 100 万数据( MYSQL )的网站,目前访问速度慢,如果让你优化,你会从哪些方 面进行考虑,谈谈你的思路
- storm的ack和fail为了保证数据能正确的被处理, 对于spout产生的每一个tuple, storm都会进行跟踪, 这里面涉及到ack/fail的处理, 如果一个tuple处理成功, 会调用s
- *****MapReduce连接:重分区连接【里面分析了org.apache.hadoop.contrib.utils.join包中的基础数据join原理和优化后的抽象类】
- SQL]合并一个表里面的的多行数据(如果不重复则合并,如果重复则舍弃)
- 判断本地系统目录下是否存在XML文件,如果不存在就创建一个XMl文件,若存在就在里面执行添加数据
- 有一张表里面有上百万的数据,在做查询的时候,如何优化?从数据库端,java端和查询语句上回答
- 【数据操作】优化SQL server性能 之 索引
- (转)大数据量高并发的数据库优化与sql优化
- 【数据操作】优化SQL server性能 之 索引 (转上)
- 安卓性能优化之Activity和Fragment通过onSaveInstanceState()保存和恢复数据
- MySQL系列—Scheme设计与数据类型优化
- MongoDB----数据结构---数据结构优化修改
- EXTJS 动态数据 行里面 添加 删除 操作
- 把user对象里面的数据解析成json格式
- phpmyadmin里面导入sql语句格式的大量数据的方法