现有一张大表:数据量为900万,将来可能会有1亿的数据量;如此大的数据量查询的响应时间很长,现在这张表没有做任何的优化设置,我现在的想法是为这个表做表分区来存放有一定关系的数据,表的结构是这样的:表名:IC库存表编号     ID NUMBER
用户编号     USERID NUMBER
型号      MODEL      VARCHAR2
厂商     MAKER      VARCHAR2
数量     AMOUNT NUMBER
批号     LOTNUMBER         VARCHAR2
上传时间     UPTIME DATE
价格     PRICE NUMBER
状态     STATE NUMBER
封装     ENCAPSULATION         VARCHAR2
描述     DECRIPT VARCHAR2
是否审核     VOUCH NUMBER
是否现货     SPOTGOODS NUMBER
说明:型号是以26个字母或者0-9这几个数字开头的
对此表常用操作是:
1. 向此表中导入数据(EXCEL文件格式)
2. 向此表中逐条插入数据
3. 对此表进行查询操作,常用查询字段是: 型号(MODEL)、数量(AMOUNT)、批号(LOTNUMBER)、封装(ENCAPSULATION)、用户编号(USERID),其中型号、用户编号字段用得最多。问题:
1. 现在的解决办法是:按型号的头两个字符分成若干个表,每个表以IC_加 ”型号” 的头两个字符命名, 这些表中存放 ” 型号” 头两个字符与表名对应的数据.(如:型号头两个字符为IR的数据存放到IC_IR表中),这样就解决了按型号查询的速度问题,但是不能解决按“用户编号”查询的速度问题,也就是说,如果要查询某一用户的库存时,必须扫描每个分表中以查出某一用户的库存。
2. 如果用表分区方法的话应该怎么去分区?
3. 向此表中导入数据的时候会不会自动的把相应的数据导入到相应的分区里面?
4. 现有的数据如何归类到相应的表分区中?不知道还有没有别的更好的方法呢?

解决方案 »

  1.   

    建議使用分區表來做表分区技术是在超大型数据库(VLDB)中将大表及其索引通过分区(patition)的形式分割为若干较小、可管理的小块,并且每一分区可进一步划分为更小的子分区(sub partition)。而这种分区对于应用来说是透明的。通过对表进行分区,可以获得以下的好处:  1)减少数据损坏的可能性。  2)各分区可以独立备份和恢复,增强了数据库的可管理性。  3)可以控制分区在硬盘上的分布,以均衡IO,改善了数据库的性能具體的用法你可以網上查找下
      

  2.   

    to baojianjun:如果用分区表来做的话能不能解决我以上提出的第3和第4个问题呢?
      

  3.   

    to baojianjun: 
    忘了说明一下:上传时间是可以更新的,所以我觉得不应该用上传时间来分区吧
      

  4.   

    就按型号、用户编号做复合分区呗。做Range-list的复合分区,先按用户编号做Range分区,再按型号做list分区。而后记得根据需要创建分区索引,这样保证效率提高极大。
      

  5.   

    还有就是list分区能不能模糊匹配,如果可以的话给个例子看看!