none
自动表分区方案 RRS feed

答案

  • 那问下,分区键一定要是聚集索引的一部分才能发挥最大的性能吗?
    Should put clustered index on partition key, otherwise will see performance issue.
    2012年9月10日 14:20
  • 在对非唯一的聚集索引进行分区时,如果尚未指定分区依据列,则默认情况下数据库引擎将在聚集索引键列表中添加分区依据列。在对非唯一的非聚集索引进行分区时,如果尚未指定分区依据列,则数据库引擎会添加分区依据列作为索引的非键(包含)列。

    想不想时已是想,不如不想都不想。

    2012年9月11日 3:08
    版主

全部回复

  • 不知道这是不是你要的,有兴趣不妨参考看看。

    http://msdn.microsoft.com/en-us/library/aa964122(v=sql.90).aspx


    以上說明若有錯誤請指教,謝謝。
    歡迎參觀我的BLOG - 積沙成塔

    2012年9月10日 3:27
  • Can use sql job to add/remove partition.
    2012年9月10日 3:37
  • 那问下,分区键一定要是聚集索引的一部分才能发挥最大的性能吗?
    2012年9月10日 3:50
  • 分区键一定要是聚集索引的一部分才能发挥最大的性能 你从哪里听说的?

    给我写信: QQ我:点击这里给我发消息

    2012年9月10日 13:45
  • 那问下,分区键一定要是聚集索引的一部分才能发挥最大的性能吗?
    Should put clustered index on partition key, otherwise will see performance issue.
    2012年9月10日 14:20
  • 请问有文章参考吗?rmiao大侠

    给我写信: QQ我:点击这里给我发消息

    2012年9月11日 0:46
  • 在对非唯一的聚集索引进行分区时,如果尚未指定分区依据列,则默认情况下数据库引擎将在聚集索引键列表中添加分区依据列。在对非唯一的非聚集索引进行分区时,如果尚未指定分区依据列,则数据库引擎会添加分区依据列作为索引的非键(包含)列。

    想不想时已是想,不如不想都不想。

    2012年9月11日 3:08
    版主
  • 对的,我今天试验了,一定要把分区键做为聚集索引的一部分,而且要把聚集索引放到分区方案中才真正的实现表分区(数据分区),才能在A分区被锁定的时候,B分区也能访问,才能提高一个表的最大并发性!

    2012年9月11日 3:53
  • 不一定要聚集索引吧,在SQL2005或以后版本引入的分区概念,表的存储是 分区-》页,一个分区有很多页,如果你不创建分区,实际上表的数据都已经在默认分区里了,

    只不过创建分区把数据放在不同的分区里,这些分区又放在不同的文件组里,不同的文件组放在不同的硬盘里,这样来减少单独一个磁盘的I/O负载。

    有没有分区对程序员都是透明的,程序员如常读取表数据就可以了。

    请问杨国防大侠你怎麽知道一个分区被锁定呢? 

    如有错误还请大家指教

    --创建分区函数
    USE partionTest 
    GO 
    CREATE PARTITION FUNCTION PartionByInt(INT )
    AS RANGE LEFT FOR VALUES (100,200,300)
    GO 
    
    --创建分区方案
    USE partionTest 
    GO 
    CREATE PARTITION SCHEME PartionByIntScheme
    AS PARTITION PartionByInt
    TO (FileGroup001,FileGroup002,FileGroup003,FileGroup004);
    
    --创建表
    USE partionTest 
    GO 
    CREATE TABLE testPartionTable
    (id INT NOT NULL ,
    ItemNo CHAR( 20),
    ItemName CHAR( 40))
    ON PartionByIntScheme(ID);
    
    --插入数据
    USE partionTest 
    GO 
    
    DECLARE @count INT 
    SET @count =-25
    WHILE @count <=100
    BEGIN 
    INSERT INTO dbo.testPartionTable 
    SELECT @count ,'ITEM'+CONVERT( VARCHAR(6),@count),'>0 and <100'
    SET @count =@count +1
    END 
    
    SET @count =101
    WHILE @count <=200
    BEGIN 
    INSERT INTO dbo.testPartionTable 
    SELECT @count ,'ITEM'+CONVERT( VARCHAR(6),@count),'>100 and <200'
    SET @count =@count +1
    END 
    
    SET @count =201
    WHILE @count <=300
    BEGIN 
    INSERT INTO dbo.testPartionTable 
    SELECT @count ,'ITEM'+CONVERT( VARCHAR(6),@count),'>200 and <300'
    SET @count =@count +1
    END 
    
    SET @count =301
    WHILE @count <=400
    BEGIN 
    INSERT INTO dbo.testPartionTable 
    SELECT @count ,'ITEM'+CONVERT( VARCHAR(6),@count),'>300 and <400'
    SET @count =@count +1
    END 
    
    SET @count =401
    WHILE @count <=500
    BEGIN 
    INSERT INTO dbo.testPartionTable 
    SELECT @count ,'ITEM'+CONVERT( VARCHAR(6),@count),'>400 and <500'
    SET @count =@count +1
    END 
    
    
    SELECT * FROM dbo.testPartionTable 
    GO 
    
    
    --查看第三分区中所含记录
    --$PARTITION系统函数用于为指定的分区函数返回分区号例如:$PARTITION.PartionByInt(ID)=3用于返回给ID所处的分区号
    USE partionTest 
    GO 
    SELECT * FROM dbo.testPartionTable 
    WHERE $PARTITION.PartionByInt(ID)=3
    GO 
    


    给我写信: QQ我:点击这里给我发消息

    2012年9月11日 5:04
  • First of all, partition doesn't require separate file groups. You can put all partitions in same file group.
    2012年9月11日 13:15
  • 我知道,rmiao大侠我只是解释


    给我写信: QQ我:点击这里给我发消息

    2012年9月11日 14:38
  • 我做的实验如下:

    CREATE NONCLUSTERED INDEX AK_EN_F9997_tbname_EN_F9997_001 ON  EN_F9997(
    tbname, EN_F9997_001
    )
    ON date_schema(tbname)


    tbname是分区键:
    1.事务锁定分区9
    BEGIN TRAN
    UPDATE EN_F9997
    SET EN_F9997_002=9
    WHERE tbname=9
    (26551 行受影响)
    2.访问其它分区

    SELECT  * FROM EN_F9997  WHERE tbname<>9
    处于堵塞状态

    出现这个情况就是因为我没对聚集索引进行分区

    2012年9月12日 3:02
  • 没对聚集索引进行分区?你创建不是非聚集索引吗?

    给我写信: QQ我:点击这里给我发消息

    2012年9月21日 8:39