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分)
...全文
519 7 打赏 收藏 转发到动态 举报
写回复
用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<=?
........
Re: Mycat 实现 MySQL的分库分、读写分离、主从切换 =============================# MyCAT 作用是能够代替昂贵的oracle的MySQL集群中间件。     1) 一个彻底开源的,面向企业应用开发的“大数据库集群”    2) 支持事务、ACID、可以替代Mysql的加强版数据库    3) 一个可以视为“MySQL”集群的企业级数据库,用来替代昂贵的Oracle集群(核心价值观) (即:可不用 Orcale数据库及RAC等,以此代替)    4) 一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server    5) 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品    6) 一个数据库中间件产品 # MyCAT 目标:    1) 低成本的将现有的单机数据库和应用,平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。从这一点介绍上来看,能满足数据库数据大量存储,提高了查询性能。    2) MyCat在大数据方面的运用不容小觑啊。 # MyCAT 特性    1) 支持 SQL 92标准    2) 支持Mysql集群,可以作为Proxy使用    3) 支持JDBC连接ORACLE、DB2、SQL Server,将其模拟为MySQL Server使用    4) 支持galera for mysql集群,percona-cluster或者mariadb cluster, (提供高可用性数据分片集群)    5) 自动故障切换,高可用性(failover & HA)    6) 支持读写分离,支持Mysql双主多从,以及一主多从的模式    7) 支持全局,数据自动分片到多个节点,用于高效关联查询    8) 支持独有的基于E/R 关系的分片策略,实现了高效的关联查询    9) 多平台支持,部署和实施简单 # MyCAT 架构    用户可以把MyCAT看作是一个数据库代理,用mysql客户端工具(如Navicat)和命令访问,其核心功能就是分库分,即将一个大水平分割为N个小,真正的存储在后端Mysql服务器中或其它数据库中。      

5,889

社区成员

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

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