DB2如何高效实现多表查询

杰小 2011-01-12 05:09:29
现有数据表TEST200901,TEST200902,TEST200903....TEST201112共36张表,即存了3年的历史数据,按月建表存放

现有一个查询,需要将36张表中的数据给查询出来,这36张表的数据字段全部没有,没有主键,(如果一定需要一个主键,可以添加一个自增字段做主键,目前没有)

每张表数据约1800万,总计结果集6亿

假定表中字段均为
name1 name2 name3
100 20090101 300

每张表均是按name1建了分区,name2为日期字段,为查询条件
结果展现name1,name2,name3都要展现


注:36张表的数据最终需要union all

select name1,name2,name3 from TEST200901
union all
select name1,name2,name3 from TEST200902
union all
.
.
.
select name1,name2,name3 from TEST201112

where name1=? and name3>=? and name3<=?

怎样可以比较高效的实现,需要实现实时查询,所以没法用过程或函数预处理

请高手指点,谢谢
(因等级受限制,只能发100分,如果完美实现,在另外发帖补给300分)
...全文
561 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
big_banyan 2011-01-17
  • 打赏
  • 举报
回复
首先,尝试建立联合索引name1, name3
或者可以建立MDC表,按照name1, name3组织数据(organized by),如果要对name1和name3进行group by这个能显著提高性能
还需要对数据在硬盘上的分布进行规划,尽量发挥磁盘IO的并行性
优化排序堆、缓冲池等内存参数

如果这些方式未达到效果,那么优化应用层,首先对数据进行预处理,然后在应用层加一些逻辑,以分担数据库的访问性能
zhaojianmi1 2011-01-16
  • 打赏
  • 举报
回复
当做一个大工程来做吧,对方案做好测试,优化手段一样一样试
  • 打赏
  • 举报
回复
建立索引,用DB2自带工具分析执行效率
ACMAIN_CHM 2011-01-12
  • 打赏
  • 举报
回复
把条件加在每个子查询中。

select name1,name2,name3 from TEST200901 where name1=? and name3>=? and name3<=?
union all
select name1,name2,name3 from TEST200902 where name1=? and name3>=? and name3<=?
union all
.
.
.
select name1,name2,name3 from TEST201112 where name1=? and name3>=? and name3<=?
zhaojianmi1 2011-01-12
  • 打赏
  • 举报
回复
首先,尝试建立联合索引name1, name3
或者可以建立MDC表,按照name1, name3组织数据(organized by),如果要对name1和name3进行group by这个能显著提高性能
还需要对数据在硬盘上的分布进行规划,尽量发挥磁盘IO的并行性
优化排序堆、缓冲池等内存参数

如果这些方式未达到效果,那么优化应用层,首先对数据进行预处理,然后在应用层加一些逻辑,以分担数据库的访问性能
dmewy 2011-01-12
  • 打赏
  • 举报
回复
根据你的需求 只需要在每张表建立 name1 和name3 一个联合index就行...

全部都查这种需求我只能告诉你没有可能.

web-ap的话 有分页 你在前台完全可以知道限定的日期 从此得到你要查的详细表是哪个月份的. 在java做下动态表名就行..

如果是纯导出数据的话 那没办法 只能union all了 建议一年一年的导 导三次就好了. 我想说没人会看三年的那些详细数据的. 真正的需求最多是个趋势图...数据汇总一下放入另外一张表就行..
wwwwb 2011-01-12
  • 打赏
  • 举报
回复
根据你的条件,在NAME1,NAME3上建立索引
select name1,name2,name3 from TEST200901 where name1=? and name3>=? and name3<=?
union all
select name1,name2,name3 from TEST200902 where name1=? and name3>=? and name3<=?
........

5,891

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧