none
已经存在的数据表进行分区--怎么解决 RRS feed

  • 问题

  • 首先已经存在的数据表没有任何 主键,约束,和索引

    ALTER DATABASE Demo ADD FILEGROUP YEARFG1;
    ALTER DATABASE Demo ADD FILEGROUP YEARFG2;
    ALTER DATABASE Demo ADD FILEGROUP YEARFG3;
    ALTER DATABASE Demo ADD FILEGROUP YEARFG4;
    ALTER DATABASE Demo ADD FILEGROUP YEARFG5;
    ALTER DATABASE Demo ADD FILEGROUP YEARFG6;

    ALTER DATABASE Demo ADD FILE (NAME = 'YEARF1', FILENAME = 'C:ADVWORKSF1.NDF') TO FILEGROUP YEARFG1;
    ALTER DATABASE Demo ADD FILE (NAME = 'YEARF2', FILENAME = 'C:ADVWORKSF2.NDF') TO FILEGROUP YEARFG2;
    ALTER DATABASE Demo ADD FILE (NAME = 'YEARF3', FILENAME = 'C:ADVWORKSF3.NDF') TO FILEGROUP YEARFG3;
    ALTER DATABASE Demo ADD FILE (NAME = 'YEARF4', FILENAME = 'C:ADVWORKSF4.NDF') TO FILEGROUP YEARFG4;
    ALTER DATABASE Demo ADD FILE (NAME = 'YEARF5', FILENAME = 'C:ADVWORKSF5.NDF') TO FILEGROUP YEARFG5;
    ALTER DATABASE Demo ADD FILE (NAME = 'YEARF6', FILENAME = 'C:ADVWORKSF6.NDF') TO FILEGROUP YEARFG6;

     
     已经有一张数据表 TestTB (id int  , sex char(2),birthday datetime)
     里面有10000000万数据,没有主键、索引、约束。
     现在我想对此表进行按 BIRTHDAY 进行分区
     

    第1步:
    CREATE PARTITION FUNCTION DupARPF(datetime)
    AS
    RANGE LEFT FOR VALUES ('2003-01-01'
     ,'2005-01-01'
     ,'2007-01-01'
     ,'2008-01-01'
     ,'2009-01-01'
     ,'2010-01-01')

    第二步:
    CREATE PARTITION SCHEME DupARPS
    AS PARTITION DupARPF TO (YEARFG1, YEARFG2,YEARFG3,YEARFG4,YEARFG5,YEARFG6,YEARFG7)

    第三步 我该怎么作能把 "DupARPS" 和 已经存在数据表(TestTB) 关联起来进行分区


    星光总能为我指引方向
    2011年6月20日 5:53

全部回复

  • create clustered index TestTB_index
    on orders(BIRTHDAY)
    on DupARPS(BIRTHDAY);
    go

     

    考虑到你这个数据比较多(10000000万),执行时间比较长。

     

    建议是否可以新建一个表,将数据分批导入到新表内呢?


    family as water
    2011年6月20日 7:08
  • 你好你的这种方案我已经用过了,但是有个问题,鼠标右键-属性-存储:有个文件组:已对表进行分区,但是此时是:FALSE 不是TRUE  此时我认为,我执行上述

    create clustered index TestTB_index
    on orders(BIRTHDAY)
    on DupARPS(BIRTHDAY);
    go

    TestTB 的属性-存储-

     有个文件组:已对表进行分区 应该是:TRUE 吧

    还有,你的建议是,首先建立一个复表,之后,建立分区,再把数据作快照过去,我的理解对吗


    星光总能为我指引方向
    2011年6月20日 7:29
  • When did you check table properties? Before or after creating clustered index? What's file group name for that table?
    2011年6月20日 13:36
  • 你好你的这种方案我已经用过了,但是有个问题,鼠标右键-属性-存储:有个文件组:已对表进行分区,但是此时是:FALSE 不是TRUE  此时我认为,我执行上述

    create clustered index TestTB_index
    on orders(BIRTHDAY)
    on DupARPS(BIRTHDAY);
    go

    TestTB 的属性-存储-

     有个文件组:已对表进行分区 应该是:TRUE 吧

    还有,你的建议是,首先建立一个复表,之后,建立分区,再把数据作快照过去,我的理解对吗


    星光总能为我指引方向


    1.这个文件组是什么名字?是你前面脚本建立的么?

    2.不是我的意思,你先建好分区表,在将需要分区的数据分批insert到这个建好的分区表内。


    family as water
    2011年6月21日 1:09
  • 你好,假设我现在生产库上不允许建立复表,之后建立分区,再把数据分批导进分区表的?此时我的疑问是?

    create clustered index TestTB_index
    on TestTB(BIRTHDAY)
    on DupARPS(BIRTHDAY);
    go

    create clustered index TestTB_index
    on TestTB(BIRTHDAY)

    请问?哪个效率会更好呢?


    星光总能为我指引方向
    2011年6月22日 6:13
  • 他写错了,只有一个on子句。如果clustered index已经存在,用drop_exist


    想不想时已是想,不如不想都不想。
    2011年6月22日 7:18
    版主