Sql Server Hash 分区

Sql Server Hash 分区

--分区函数
CREATE PARTITION FUNCTION [zping.com.pf](int) AS
RANGE LEFT FOR VALUES (-1073741824, 0, 1073741824)
 
--分区方案
CREATE PARTITION SCHEME [zping.com.ps] AS
PARTITION [zping.com.pf] all TO ([PRIMARY])
 
--建立分区表
CREATE TABLE [dbo].[zping.com](
[id] [varchar](32) NOT NULL,
[sid] int,
[hashid] AS (checksum([id])) PERSISTED
)
ON [zping.com.ps] ([hashid])
--注意:1,这里我们使用了计算列的做为分区列,在SQL server 2005中,分区列如果是计算列,必须PERSISTED持久化
--2,我们这里使用了checksum(列)这个哈希函数,该函数用来计算id的hash值,这个函数同时可以用来建立hash索引
 
--插入1万条测试数据
insert into [zping.com](id,sid)
select replace(newid(),'-',''),1 from (select top 100 * from syscolumns) a,(select top 100 * from syscolumns) b
 
--查看数据的分布分区情况
SELECT $partition.[zping.com.pf](hashid) AS 分区号,count(*) 数据条数
FROM [zping.com]
group by $partition.[zping.com.pf](hashid)
你需要了解下这些信息:
1. 如果一个文件组有多个文件,数据会按文件大小比例写入到各个文件中;如果文件满了,就循环写入同组中的其他文件;
2. 如果是不同文件组,则需要指定表或索引存储在某个文件组中,表或索引只能存储在一个文件组中;
你上面创建的是新的文件组 [201109],如果想让这个文件组存储数据,就把表切换到这个文件组中(参考:SQLServer 2008 切换表的存储文件组)。
若想让一个表在多个文件组中存储数据,那就将表进行分区。
下面的表总结了何时使用聚集索引或非聚集索引(很重要):
动作描述
使用聚集索引
使用非聚集索引
列经常被分组排序
返回某范围内的数据
不应
一个或极少不同值
不应
不应
小数目的不同值
不应
大数目的不同值
不应
频繁更新的列
不应
外键列
主键列
频繁修改索引列
不应
posted @ 2018-08-11 13:34  micwin  阅读(1080)  评论(0编辑  收藏  举报