随笔 - 99  文章 - 2 评论 - 902 trackbacks - 17
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789


转载请保留链接。
国家体育场(鸟巢)是建筑史上的令人惊叹之作,杂乱的基础结构组成了一个和谐的整体,正是中国社会的成功写照。 7-18 17:44

与我联系

常用链接

留言簿(12)

我参与的团队

我的标签

随笔分类

随笔档案

文章分类

相册

最新随笔

搜索

  •  

积分与排名

  • 积分 - 141491
  • 排名 - 243

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

代码加注释,希望对初学者有用。

USE [master]
GO
if exists (select * from sys.databases where name = 'Test_1')
drop database Test_1
GO
--创建新库,要演练分区所以我们会多创建两个文件组Test_A,Test_B,以便在后面的分区方案中使用。
CREATE DATABASE [Test_1] ON  PRIMARY 
( NAME 
= N'test_1', FILENAME = N'D:\sqldata\test_1.mdf' , SIZE = 10240KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
 FILEGROUP 
[test_A] 
( NAME 
= N'Test_A', FILENAME = N'D:\sqldata\test_A.ndf' , SIZE = 1024KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
FILEGROUP 
[test_B] 
( NAME 
= N'Test_B', FILENAME = N'D:\sqldata\test_B.ndf' , SIZE = 1024KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 
LOG ON 
( NAME 
= N'Test_log', FILENAME = N'D:\sqldata\Test_log.ldf' , SIZE = 7616KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
 COLLATE Chinese_PRC_CI_AS
GO
USE [Test_1]
GO
--若分区函数存在则先drop掉
IF  EXISTS (SELECT * FROM sys.partition_functions WHERE name = N'test_partition')
DROP PARTITION FUNCTION [test_partition]
GO
/*创建分区函数给后面的分区方案使用,分区函数很简单就是指定一个范围确定在某个值为什么的时候放在那个分区上*/
--新建一个简单的分区函数,该函数以1000为界分两个区
create partition function test_partition(int)
AS
RANGE 
LEFT FOR VALUES (1000
go
/*看分区方案是否存在,若存在先drop掉*/
IF  EXISTS (SELECT * FROM sys.partition_schemes WHERE name = N'test_scheme')
DROP PARTITION SCHEME test_scheme
GO
--创建分区方案,分区方案需要指定一个分区函数,并指定在分区函数中分的区需要放在哪一个文件组上
create partition scheme test_scheme 
AS 
PARTITION 
[test_partition] TO (test_A,test_B)
GO
--创建分区表
if object_id('student','U'is not null
drop table student;
go
create table student
(
    id 
int identity(1,1not null,
    name 
varchar(10not null,
    class 
int not null,
    grade 
int
on test_scheme(class) --在此处指定该表要使用的分区方案,并将指定分区依据列
go
--随便插入几条数据
insert into student values ('AQU',10,100); -- 这条数据在A分区上
insert into student values ('AQU_边界',1000,89); -- 这边数据也在A分区上是个边界,因为我们上面在函数中指定的是RANGE LEFT,所以1000在A分区上
insert into student values ('BQU',1001,90); -- 这一条肯定是在B分区上了。

go
--最后看看结果。$partition.分区函数(分区列)可以返回某一行所在的分区序号
select *,分区序号 = $partition.test_partition(class) from student
GO
posted on 2008-05-07 11:32 玉开 阅读(253) 评论(9)  编辑 收藏 所属分类: 数据库sql server

FeedBack:
#1楼  2008-05-07 11:54 wingoo      
有个问题,分区表创建之后,是不是所有原来的curd操作的语句都要变化了?
  回复  引用  查看    
#2楼  2008-05-07 11:57 winzheng      
学习。。。
  回复  引用  查看    
#3楼 [楼主] 2008-05-07 12:27 玉开      
@wingoo
操作语句都不需要变化。
  回复  引用  查看    
#4楼 [楼主] 2008-05-07 12:29 玉开      
分区是为了改善大表大数据量情况下的性能,他对于curd操作来说是透明的。不必考虑
  回复  引用  查看    
#5楼  2008-05-07 12:35 wingoo      
@玉开 知道了,谢谢

  回复  引用  查看    
#6楼  2008-05-07 14:23 sunrisex [未注册用户]
mssql 2000可以吗?
  回复  引用    
#7楼 [楼主] 2008-05-07 15:12 玉开      
@sunrisex
2000不可以分区,只能用户定义一系列的表,例如student_2000,student_2001;然后自己在程序中根据逻辑判断来插入不同表中。
  回复  引用  查看    
#8楼  2008-05-07 17:30 Cheney Shue      
索引能分区吗 ?
  回复  引用  查看    
#9楼 [楼主] 2008-05-07 17:37 玉开      
@Cheney Shue
可以分区,在分区表上最好可以做到索引与分区对齐。

具体请看msdn
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-07 11:44 编辑过
 
另存  打印