哈希分区 sql2005----函数 PARTITION hash

 

用此函数可以创建sql server 的hash partition(哈希分区).

从所周知,sql server 2005 只有列表分区,范围分区.

使用checksum函数可以创建相应的hash partition.

建立分区函数:

CREATE PARTITION FUNCTION fun_hash (int) AS

RANGE LEFT FOR VALUES (-1073741824, 0, 1073741824)

注意:我们这里使用的int型数据,因为hash函数是checksum(id),这里根据int的最大长度进行分区,我们使用2,147,483,648/2=1073741824

这里:Range left 意思: <=

      Range right 意思: <

创建分区方案及相应的表:

CREATE PARTITION SCHEME sche_fun_hash AS PARTITION fun_hash  all TO ([PRIMARY])


CREATE TABLE [dbo].test(

    [id] [varchar](32) NOT NULL,

    [sid] int,

    [hashid] AS (checksum([id])) PERSISTED

)

ON sche_fun_hash ([hashid])

插入数据并查看数据分布情况:

insert into test(id,sid)

select replace(newid(),'-',''),1

from (select top 100 * from syscolumns) a

,(select top 100 * from syscolumns) b


SELECT

    $partition.fun_hash(hashid)

      AS 分区号,count(*) 数据条数

FROM test

group by $partition.fun_hash(hashid)

查看结果:

分区号 数据条数
3 2438
1 2527
4 2532
2 2503

基本做到了分布均匀.

 

-------------------------------

 

上例中,查看内部相关系统数据:

SELECT TOP 20 * FROM sys.tables t WHERE t.name='TEST' SELECT TOP 20 * FROM sys.indexes i WHERE [object_id]='1829581556' SELECT TOP 20 * FROM sys.partitions WHERE [object_id]='1829581556' SELECT TOP 20 * FROM sys.allocation_units au WHERE ALLOCATION_UNIT_ID='72057594043301888' 

 

 

你可能感兴趣的:(sql,sql,server,object,Scheme,fun,Allocation)