哪位大侠讲讲分区表的知识啊 哪位大侠讲讲分区表的知识啊,最好从最基本的讲起,从怎么创建到怎么使用 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 分区函数分区架构分区表或分区索引按照这三部分来记就差不多了,其他的看MSDN MS SQL Server:分区表、分区索引 详解http://space.itpub.net/7705285/viewspace-417558 SQL分区表http://blog.csdn.net/pt1314917/archive/2009/08/11/4435083.aspx -- 创建分区函数create partition function PF_Orders_OrderDateRange(datetime)asrange right for values ('1997-01-01','1998-01-01','1999-01-01')go-- 创建分区方案create partition scheme PS_Ordersaspartition PF_Orders_OrderDateRangeto ([primary], [primary], [primary], [primary])go-- 创建分区表create table dbo.Orders( OrderID int not null ,CustomerID varchar(10) not null ,EmployeeID int not null ,OrderDate datetime not null)on PS_Orders(OrderDate)go-- 创建聚集分区索引create clustered index IXC_Orders_OrderDate on dbo.Orders(OrderDate)go-- 为分区表设置主键alter table dbo.Orders add constraint PK_Orders primary key (OrderID, CustomerID, OrderDate)go-- 导入数据到分区表insert into dbo.Ordersselect OrderID, CustomerID, EmployeeID, OrderDate from dbo.Orders_From_SQL2000_Northwind --(注:数据来源于 SQL Server 2000 示例数据库)go-- 查看分区表每个分区的数据分布情况select partition = $partition.PF_Orders_OrderDateRange(OrderDate) ,rows = count(*) ,minval = min(OrderDate) ,maxval = max(OrderDate) from dbo.Orders group by $partition.PF_Orders_OrderDateRange(OrderDate) order by partitiongoSQL SERVER 2005 分区表实际应用例子 定义,原理网上讲得多了.在这就不费口舌,记录下创建过程. 一. 最基本,最重要的一步就是创建分区函数.创建分区函数首先要确定分区键--既按照哪字段来进行分区.在这个例子里,我用记录的时间来作为分区键,由于数据量的问题,最终决定每个月的数据放一个单独的分区. CREATE PARTITION FUNCTION FiveYearDateRangePFN(datetime) AS RANGE LEFT FOR VALUES ( '20060930 23:59:59.997', -- 2006 年 9 月 '20061031 23:59:59.997', -- 2006 年 10 月 '20061130 23:59:59.997', -- 2006 年 11 月 '20061231 23:59:59.997', -- 2006 年 12 月 '20070131 23:59:59.997', -- 2007 年 1 月 '20070228 23:59:59.997', -- 2007 年 2 月 '20070331 23:59:59.997', -- 2007 年 3 月 '20070430 23:59:59.997', -- 2007 年 4 月 '20070531 23:59:59.997', -- 2007 年 5 月 '20070630 23:59:59.997', -- 2007 年 6 月 '20070731 23:59:59.997', -- 2007 年 7 月 '20070831 23:59:59.997', -- 2007 年 8 月 '20070930 23:59:59.997', -- 2007 年 9 月 '20071031 23:59:59.997', -- 2007 年 10 月 '20071130 23:59:59.997', -- 2007 年 11 月 '20071231 23:59:59.997', -- 2007 年 12 月 ....... } GO 二. 上一步是完成一个概念上的分区,接下来要完成一个物理的构建,使得属于不同分区的数据存储到不同的物理文件上去. a.创建文件组 --File group for 2006 ALTER DATABASE MyDB ADD FILEGROUP [Teaching200609] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200610] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200611] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200612] --File group for 2007 ALTER DATABASE MyDB ADD FILEGROUP [Teaching200701] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200702] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200703] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200704] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200705] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200706] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200707] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200708] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200709] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200710] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200711] ALTER DATABASE MyDB ADD FILEGROUP [Teaching200712] ...... b.创建物理文件,在这里,为了方便起见,我把每个物理文件放到了一个单独的文件组里面. --Add file for 2006 ALTER DATABASE MyLuDB ADD FILE (NAME = N'Teaching200609',FILENAME = N'D:\MyData\MyLu\Teaching200609.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) TO FILEGROUP [Teaching200609] ALTER DATABASE MyLuDB ADD FILE (NAME = N'Teaching200610',FILENAME = N'D:\MyData\MyLu\Teaching200610.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) TO FILEGROUP [Teaching200610] ALTER DATABASE MyLuDB ADD FILE (NAME = N'Teaching200611',FILENAME = N'D:\MyData\MyLu\Teaching200611.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) TO FILEGROUP [Teaching200611] ...... 三. 创建完分区函数,接下来就要建立分区架构,用来将概念上的分区和文件组(物理文件)关联起来. CREATE PARTITION SCHEME [FiveYearDateRangePScheme] AS PARTITION FiveYearDateRangePFN TO ( [Teaching200609],[Teaching200610],[Teaching200611],[Teaching200612], [Teaching200701],[Teaching200702],[Teaching200703],[Teaching200704], [Teaching200705],[Teaching200706],[Teaching200707],[Teaching200708], [Teaching200709],[Teaching200710],[Teaching200711],[Teaching200712], ...... [PRIMARY] ) GO 四. 分区表的基础架构到此就完成了,接下来就要建立分区表了. CREATE TABLE [dbo].[ObjTeaching]( [TeachingID] [uniqueidentifier] NOT NULL, [TeacherID] [uniqueidentifier] NULL, [TeacherName] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL, [ClassID] [uniqueidentifier] NULL, [ClassName] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NULL, [CourseID] [uniqueidentifier] NULL, [CourseName] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NULL, [CourseSequenceID] [uniqueidentifier] NULL, [TeachingDate] [datetime] NOT NULL, [IsUsingEqt] [bit] NULL, [ScoreID] [uniqueidentifier] NULL, ...... ) ON FiveYearDateRangePScheme(TeachingDate) ALTER TABLE [ObjTeaching] ADD CONSTRAINT [ObjTeaching_PK] PRIMARY KEY CLUSTERED ([TeachingID], [TeachingDate]) GO 在建立分区表的时候注意一下分区键的选择就OK了 接下来呢,就可以往分区表里面插入数据,SQL SERVER会根据分区键的不同将数据放到相应的分区,我们可以通过如下语句来查看数据存在那个分区中: select $partition.FiveYearDateRangePFN(teachingdate),teachingdate,* from objteaching a order by a.teachingdate asc 总得说来,SQL SERVER 2005的分区表有了一个非常大的进步,使用起来也比较简单(除了频繁的Copy/Paste脚本,然后在一行行改@_@).至于性能方面,还没时间详细测试,留在以后有空了再说!:) SQL语句难题 求解 SQL语句错误CASE...WHEN 求个存储过程的写法,急!!!!!!!! 从两个表中获得特定格式的统计数据集 请问sqlserver能抛出错误吗? 抓狂中——奇怪的数据库作业问题 流程的查询问题 SQL Server 2005 中out apply运用 高分请教数据库还原问题!!!!急!急!急!急!急!急! 一个简单SQL语句的优化 主表从表修改问题 'SQLOLEDB' 无法启动分布式事务
分区架构
分区表或分区索引按照这三部分来记就差不多了,其他的看MSDN
create partition function PF_Orders_OrderDateRange(datetime)
as
range right for values (
'1997-01-01',
'1998-01-01',
'1999-01-01'
)
go-- 创建分区方案
create partition scheme PS_Orders
as
partition PF_Orders_OrderDateRange
to ([primary], [primary], [primary], [primary])
go
-- 创建分区表
create table dbo.Orders
(
OrderID int not null
,CustomerID varchar(10) not null
,EmployeeID int not null
,OrderDate datetime not null
)
on PS_Orders(OrderDate)
go-- 创建聚集分区索引
create clustered index IXC_Orders_OrderDate on dbo.Orders(OrderDate)
go-- 为分区表设置主键
alter table dbo.Orders add constraint PK_Orders
primary key (OrderID, CustomerID, OrderDate)
go-- 导入数据到分区表
insert into dbo.Orders
select OrderID, CustomerID, EmployeeID, OrderDate
from dbo.Orders_From_SQL2000_Northwind --(注:数据来源于 SQL Server 2000 示例数据库)
go-- 查看分区表每个分区的数据分布情况
select partition = $partition.PF_Orders_OrderDateRange(OrderDate)
,rows = count(*)
,minval = min(OrderDate)
,maxval = max(OrderDate)
from dbo.Orders
group by $partition.PF_Orders_OrderDateRange(OrderDate)
order by partition
go
SQL SERVER 2005 分区表实际应用例子
定义,原理网上讲得多了.在这就不费口舌,记录下创建过程.
一. 最基本,最重要的一步就是创建分区函数.创建分区函数首先要确定分区键--既按照哪字段来进行分区.在这个例子里,我用记录的时间来作为分区键,由于数据量的问题,最终决定每个月的数据放一个单独的分区. CREATE PARTITION FUNCTION FiveYearDateRangePFN(datetime)
AS
RANGE LEFT FOR VALUES (
'20060930 23:59:59.997', -- 2006 年 9 月
'20061031 23:59:59.997', -- 2006 年 10 月
'20061130 23:59:59.997', -- 2006 年 11 月
'20061231 23:59:59.997', -- 2006 年 12 月 '20070131 23:59:59.997', -- 2007 年 1 月
'20070228 23:59:59.997', -- 2007 年 2 月
'20070331 23:59:59.997', -- 2007 年 3 月
'20070430 23:59:59.997', -- 2007 年 4 月
'20070531 23:59:59.997', -- 2007 年 5 月
'20070630 23:59:59.997', -- 2007 年 6 月
'20070731 23:59:59.997', -- 2007 年 7 月
'20070831 23:59:59.997', -- 2007 年 8 月
'20070930 23:59:59.997', -- 2007 年 9 月
'20071031 23:59:59.997', -- 2007 年 10 月
'20071130 23:59:59.997', -- 2007 年 11 月
'20071231 23:59:59.997', -- 2007 年 12 月
.......
}
GO
二. 上一步是完成一个概念上的分区,接下来要完成一个物理的构建,使得属于不同分区的数据存储到不同的物理文件上去.
a.创建文件组 --File group for 2006
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200609]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200610]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200611]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200612]
--File group for 2007
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200701]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200702]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200703]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200704]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200705]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200706]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200707]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200708]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200709]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200710]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200711]
ALTER DATABASE MyDB ADD FILEGROUP [Teaching200712]
...... b.创建物理文件,在这里,为了方便起见,我把每个物理文件放到了一个单独的文件组里面. --Add file for 2006
ALTER DATABASE MyLuDB
ADD FILE
(NAME = N'Teaching200609',FILENAME = N'D:\MyData\MyLu\Teaching200609.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
TO FILEGROUP [Teaching200609] ALTER DATABASE MyLuDB
ADD FILE
(NAME = N'Teaching200610',FILENAME = N'D:\MyData\MyLu\Teaching200610.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
TO FILEGROUP [Teaching200610] ALTER DATABASE MyLuDB
ADD FILE
(NAME = N'Teaching200611',FILENAME = N'D:\MyData\MyLu\Teaching200611.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
TO FILEGROUP [Teaching200611]
......
三. 创建完分区函数,接下来就要建立分区架构,用来将概念上的分区和文件组(物理文件)关联起来. CREATE PARTITION SCHEME [FiveYearDateRangePScheme]
AS
PARTITION FiveYearDateRangePFN TO
( [Teaching200609],[Teaching200610],[Teaching200611],[Teaching200612], [Teaching200701],[Teaching200702],[Teaching200703],[Teaching200704],
[Teaching200705],[Teaching200706],[Teaching200707],[Teaching200708],
[Teaching200709],[Teaching200710],[Teaching200711],[Teaching200712],
......
[PRIMARY] )
GO 四. 分区表的基础架构到此就完成了,接下来就要建立分区表了. CREATE TABLE [dbo].[ObjTeaching](
[TeachingID] [uniqueidentifier] NOT NULL,
[TeacherID] [uniqueidentifier] NULL,
[TeacherName] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[ClassID] [uniqueidentifier] NULL,
[ClassName] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NULL,
[CourseID] [uniqueidentifier] NULL,
[CourseName] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NULL,
[CourseSequenceID] [uniqueidentifier] NULL,
[TeachingDate] [datetime] NOT NULL,
[IsUsingEqt] [bit] NULL,
[ScoreID] [uniqueidentifier] NULL,
......
) ON FiveYearDateRangePScheme(TeachingDate) ALTER TABLE [ObjTeaching]
ADD CONSTRAINT [ObjTeaching_PK]
PRIMARY KEY CLUSTERED ([TeachingID], [TeachingDate])
GO 在建立分区表的时候注意一下分区键的选择就OK了
接下来呢,就可以往分区表里面插入数据,SQL SERVER会根据分区键的不同将数据放到相应的分区,我们可以通过如下语句来查看数据存在那个分区中: select $partition.FiveYearDateRangePFN(teachingdate),teachingdate,*
from objteaching a
order by a.teachingdate asc 总得说来,SQL SERVER 2005的分区表有了一个非常大的进步,使用起来也比较简单(除了频繁的Copy/Paste脚本,然后在一行行改@_@).至于性能方面,还没时间详细测试,留在以后有空了再说!:)