表的拆分 与 表的查询

[复制链接]
查看11 | 回复4 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
生产库上因为同时访问一张表的用户太多,磁盘I/O压力太大,现在决定对 users 表进行业务拆分,
把原来的users表按照uid (主键) 划分为三张小表,
分别存储在 A , B , C 三个独立的服务器上,表名 分别叫ua ,ub, uc
为了使这一操作对应用透明,也为了正常查询users表
现在处于A库上建立对B 库和C库的 DB link 分别叫AB,AC
然后我们可以建立一个视图
createviewusersas
select*fromua
unionall
select*fromub@AB
unionall
select*fromuc@AC
这样在生产库上就能对表进行拆分,如果某个服务器的压力仍然过大,就可以继续拆分
用这样的方法来平衡磁盘I/O , 同时也达到了对程序透明,查询时还像查原来的 users 表。


现在要查询报表 , 但 A ,B,C 三个库的 I/O 压力仍然太大,查询不能在上面三个库上做, 所以建立了查询库D 。
在D 上面又建立了对A ,B ,C 三个库的DB Link DA,DB,DC
然后在D上 分别建立对A 库 ua 表, B库ub表, C库uc表的物化视图mua , mub ,muc
Createviewusersas
Select*frommua
Unionall
Select*frommub
Unionall
Select*frommuc;

这样应用就又可以直接在查询库 D 上进行数据查询了,就像在原来的生产库上查询 users 表一样。
上面就是我的查询想法,但我不清楚这样的做法是否会存在问题,请大家帮我看看。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
maybe it should consider net comunication issue.
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
我觉得分区就够了,用的着这样拆分么?
磁盘I/O压力太大可能还是你的SQL有问题
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
首先确定你的查询是不是全表扫描,如果是的话,那IO高是正常的;
如果不是,那确定能不能使用到索引,如果使用到索引还是高的话,那就考虑分区
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
为什么不能做分区呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行