关于创建分区表和分区索引

kkcool 2009-09-03 04:44:11
最近看了几本书,对sql分区方面有几个问题不大明白,网上搜了一下也没有真正搞明白,所以发帖请教大家


关于概念的问题:
1.书上总是会说“创建一个已分区的表,索引或索引视图”,要分区的表还没有创建,怎么就创建一个“已分区的...”。
2.“已分区的索引和包含列”。


非概念问题:
1.我现在手上有一本《sql server 2005实现与维护》施平安译,清华出的。其中“分区一个现有的表或索引”小节中的一段话是“我们可以再不用删除并重建一个表或索引的情况下,对一个现有的表或索引进行分区。相反,如果删除一个聚集索引,并在另一个文件组上重新建立它,sql server 将该表的全部内容移到与该聚集索引相同的文件组中。”而下面给出的步骤是:
a.创建一个分区函数。
b.创建一个分区方案。
c.删除已经存在的聚集索引。
d.在分区方案上重新建立聚集索引。
我不明白的是上面红色那句话,我们就是为了把一个表中的数据分到各个分区中,而删除聚集索引再在另一个文件组上重建他又会导致全部内容移到与该聚集索引相同的文件组中,那岂不是在经过第3,4步以后,原表所有的内容都被移动到其中一个分区(重建聚集索引那个分区)中了?

2.我在创建一个分区(无论是新建还是将原有的表分区)的时候,是不是在做完分区操作后都要重建索引(包括无论是为了重建聚集索引还是防止重建聚集索引时重复生成普通索引而将原来的普通索引删掉)?
...全文
1086 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
kkcool 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 soft_wsx 的回复:]
楼主努力呀!
[/Quote]

努力是必须的,呵呵,其实我现在就是对分区以后的索引该怎么处理不大理解,还是谢谢你的回答。
快使用降龙十八掌,哼哼哈嘿!
soft_wsx 2009-09-03
  • 打赏
  • 举报
回复
楼主努力呀!
soft_wsx 2009-09-03
  • 打赏
  • 举报
回复
高性能网站建设之 MS Sql Server数据库分区
什么是数据库分区?
数据库分区是一种对表的横向分割,Sql server 2005企业版和之后的Sql server版本才提供这种技术,这种对表的横向分割不同于2000中的表分割,它对访问用户是透明的,用户并不会感觉的表被横向分割了。(2000中的表横向分割是建n个表例如按时间建表每月一个表,表名不同,最后需要做一个大视图)

关于具体的如何做分区,请参考数据库分区演练http://www.cnblogs.com/yukaizhao/archive/2008/05/07/sql_partition_test.html

为什么要分区?
显而易见分区是为了提高数据库的读写性能,提高数据库的效率;

分区是否总是可以提高效率?
分区是一把双刃剑,并不总能提高效率,这和具体情况有关系。
之所以有分区技术,分区技术用的好的话可以提高性能,是因为一方面分区把一大块数据分成了n小块,这样查询的时候很快定位到某一小块上,在小块中寻址要快很多;另一方面CPU比磁盘IO快很多倍,而硬件上又有多个磁盘,或者是RAID(廉价磁盘冗余阵列),可以让数据库驱动CPU同时去读写不同的磁盘,这样才有可能可以提高效率。
分区在有些时候并不能提高读写效率,比如说我们经常看到的按照日期字段去分区MSDN例子,这个实例中是按照记录的生成时间来分区的,把一年的数据分割成12个分区,每月一个。这样的分区导致分区并不能实现CPU同步写并提高写入性能,因为在同一个时段CPU总是要写入到最新的那一个分区对应的磁盘中。另一个问题是:这样分区是否可以提高读取性能呢?答案是不一定,要看根据什么字段来查询,如果是根据时间来查询,根据时间生成报表那么这种分区肯定会提高查询的效率,但是如果是按照某个客户查询客户最近1年内的账单数据,这样数据分布到不同的分区上,这样的话效率就不一定能提高了,这要看数据在同一个分区上连续分布的读性能高,还是CPU从几个磁盘上同步读取,然后在合并数据的性能更高一些,这和读取数据的记录数也有关系。

如何分区?用什么字段做分区依据?
具体如何分区和涉及的业务有关系,要看业务上最经常的写入和读取操作是什么,然后再考虑分区的策略。

既然与具体业务相关,我们就假定一个业务环境,假如我们要做一个论坛,对论坛的帖子和回复表进行分区。
论坛中最常见的写操作是1)发帖 2)回复帖子,
最常见的读操作是
1) 根据帖子id显示帖子详情和分页的帖子回复
2) 根据帖子版面帖子列表页根据版面id分页读取帖子列表数据
怎么分区更合适呢?现在还没有准确答案,我有两种可能的方案,写下来,大家讨论看看。
方案1. 根据帖子ID区域段分区(1-300w一个分区、300w-600w一个分区…),这样理论上可以提高帖子详细页的读取速度,而对于写操作性能没有益处,对于根据版面id读取帖子列表页有可能有益
方案2. 根据版面id进行分区,这样对于写性能应该有提高,不同的分区对应不同的版面,当有两个版面同时有发帖回帖操作时,有可能可以并发写。对于根据版面id获得帖子列表页数据也可以提高性能,而对于帖子详细信息页没有性能影响。

多大的数据量才需要分区?
这个问题我只能说一个内部标准,如果一张表的记录超过在超过1000w,并以每月百万的数据量增长,那就需要分区。大家有不同的看法请回复讨论

关于具体的如何做分区,请参考数据库分区演练http://www.cnblogs.com/yukaizhao/archive/2008/05/07/sql_partition_test.html

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

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,1) not null,
name varchar(10) not 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
kkcool 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dawugui 的回复:]
引用 9 楼 kkcool 的回复:
谢谢dawugui

你的例子我在 邹健 的回复中也看到过,但是并没有说明关于索引的问题。

后面几个呢?
[/Quote]

正在看,第一次看到的时候后两个回复还没有刷出来,呵呵,以前没有做过后台的工作,最近dba有点忙要我帮助做点简单的事情,但是简单的分区的索引我都不理解...,正在学习
guguda2008 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kkcool 的回复:]
引用 8 楼 fredrickhu 的回复:
引用 6 楼 kkcool 的回复:
有推荐什么写的浅显易懂的书推荐一下也可以


2005技术内幕系列


又看到你了,刚才几个帖子中才碰见你,对你印象很深,因为你的头像比较特别
[/Quote]
关注大乌龟的回复
8L那个是我们版的才女,你可以看一下她的帖子
dawugui 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kkcool 的回复:]
谢谢dawugui

你的例子我在 邹健 的回复中也看到过,但是并没有说明关于索引的问题。
[/Quote]
后面几个呢?
kkcool 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fredrickhu 的回复:]
引用 6 楼 kkcool 的回复:
有推荐什么写的浅显易懂的书推荐一下也可以


2005技术内幕系列
[/Quote]

又看到你了,刚才几个帖子中才碰见你,对你印象很深,因为你的头像比较特别
kkcool 2009-09-03
  • 打赏
  • 举报
回复
谢谢dawugui

你的例子我在 邹健 的回复中也看到过,但是并没有说明关于索引的问题。
--小F-- 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kkcool 的回复:]
有推荐什么写的浅显易懂的书推荐一下也可以
[/Quote]

2005技术内幕系列
--小F-- 2009-09-03
  • 打赏
  • 举报
回复
SQL Server 2005 分区表——滑动窗口方案实践:采用滑动窗口机制,把分区表的分区依次移入到另一个分区表。值得一提的是,本文示例涉及了 SQL 分区表的方方面面:建立分区函数(partition function)、分区方案(partition scheme);分区表创建;分区函数拆分、合并;分区表分区切换(partition swtich);分区索引(partition index)等诸多内容。 

建立分区表 Orders
drop table dbo.Orders
go

drop partition scheme PS_Orders
go

drop partition function PF_Orders_OrderDateRange
go


-- 创建分区函数
create partition function PF_Orders_OrderDateRange(datetime)
as
range right for values (
'1996-01-01',
'1997-01-01',
'1998-01-01',
'1999-01-01'
)
go

-- 创建分区方案
create partition scheme PS_Orders
as
partition PF_Orders_OrderDateRange
all to ([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
建立分区表 OrdersArchive (用来归档 Orders 表中不再活跃的数据)
drop table OrdersArchive
go

drop partition scheme PS_OrdersArchive
go

drop partition function PF_OrdersArchive_OrderDateRange
go

-- 创建分区函数
create partition function PF_OrdersArchive_OrderDateRange(datetime)
as
range right for values (
'1996-01-01',
'1997-01-01'
)
go

-- 创建分区方案
create partition scheme PS_OrdersArchive
as
partition PF_OrdersArchive_OrderDateRange
all to ([primary])
go

-- 创建分区表
create table dbo.OrdersArchive
(
OrderID int not null
,CustomerID varchar(10) not null
,EmployeeID int not null
,OrderDate datetime not null
)
on PS_OrdersArchive(OrderDate)
go

-- 创建聚集分区索引
create clustered index IXC_OrdersArchive_OrderDate on dbo.OrdersArchive(OrderDate)
go

-- 为分区表设置主键
alter table dbo.OrdersArchive add constraint PK_OrdersArchive
primary key (OrderID, CustomerID, OrderDate)
go
查看分区表分区函数的分区范围
exec dbo.sp_partition_range 'dbo.Orders'
go

exec dbo.sp_partition_ragne 'dbo.OrdersArchive'
go
获取 dbo.sp_partition_range sp_partition_range代码

查看分区表每个分区的数据分布情况
-- 查看分区表 Orders 每个分区的数据分布情况
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

-- 查看分区表 OrdersArchive 每个分区的数据分布情况
select partition = $partition.PF_OrdersArchive_OrderDateRange(OrderDate)
,rows = count(*)
,minval = min(OrderDate)
,maxval = max(OrderDate)
from dbo.OrdersArchive
group by $partition.PF_OrdersArchive_OrderDateRange(OrderDate)
order by partition
运用滑动窗口机制,把分区表 Orders 分区数据迁移入 OrdersArchive
窗口滑动的步骤: 1. 在 OrdersArchive 分区表增加一个空闲分区。 2. 移动 Orders 一个分区到相应的 OrdersArchive 分区。 3. 删除 Orders 中的空闲分区。

移动订单日期为 1996 年的分区数据:

-- 为 OrderArchive 分区表的新增分区,指定存放位置。
alter partition scheme PS_OrdersArchive next used [primary]
go

-- 在 OrderArchive 新增一个分区(用来存放 1997 年数据)
alter partition function PF_OrdersArchive_OrderDateRange()
split range('1998-01-01')
go

-- 移动 Orders 1996 年数据到 OrderArchive
alter table dbo.Orders switch partition 2 to dbo.OrdersArchive partition 2
go

-- 合并 Orders 空闲分区(1996 年数据)
alter partition function PF_Orders_OrderDateRange()
merge range('1996-01-01')
go
移动订单日期为 1997 年的分区数据:

-- 为 OrderArchive 分区表的新增分区,指定存放位置。
alter partition scheme PS_OrdersArchive next used [primary]
go

-- 在 OrderArchive 新增一个分区(用来存放 1998 年数据)
alter partition function PF_OrdersArchive_OrderDateRange()
split range('1999-01-01')
go

-- 移动 Orders 1996 年数据到 OrderArchive
alter table dbo.Orders switch partition 2 to dbo.OrdersArchive partition 3
go

-- 合并 Orders 空闲分区(1997 年数据)
alter partition function PF_Orders_OrderDateRange()
merge range('1997-01-01')
go
移动订单日期为 1998 年的分区数据:

-- 为 OrderArchive 分区表的新增分区,指定存放位置。
alter partition scheme PS_OrdersArchive next used [primary]
go

-- 在 OrderArchive 新增一个分区(用来存放 1999 年数据)
alter partition function PF_OrdersArchive_OrderDateRange()
split range('2000-01-01')
go

-- 移动 Orders 1996 年数据到 OrderArchive
alter table dbo.Orders switch partition 2 to dbo.OrdersArchive partition 4
go

-- 合并 Orders 空闲分区(1998 年数据)
alter partition function PF_Orders_OrderDateRange()
merge range('1998-01-01')
go
经过以上三次移动,我们已经把分区表 Orders 中的数据全部移动到 OrdersArchive 中了。同时我们注意到:在这个窗口滑动过程中,代码中只有三处是变化的(有规律): “split range('2000-01-01')”。 “merge range('1998-01-01')”。 “to dbo.OrdersArchive partition 4”。这就为程序化处理,提供了条件。


kkcool 2009-09-03
  • 打赏
  • 举报
回复
有推荐什么写的浅显易懂的书推荐一下也可以
dawugui 2009-09-03
  • 打赏
  • 举报
回复
SQL Server 2005 中的分区表和索引

SQL Server 2005 中的分区表和索引(原理剖析)
http://hi.baidu.com/topalert/blog/item/1c83ff87d5b3742dc75cc33f.html
http://hi.baidu.com/topalert/blog/item/ecf0a0384b32d02496ddd839.html
http://hi.baidu.com/topalert/blog/item/1f62761b58b4b91e8718bf3a.html
http://hi.baidu.com/topalert/blog/item/b29e351f4ecf6cf2e1fe0b3a.html

SQL Server 2005 中的分区表和索引(案例研究)
http://hi.baidu.com/topalert/blog/item/8b449c82ff5091a50df4d23b.html
dawugui 2009-09-03
  • 打赏
  • 举报
回复
-- 创建分区函数
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



dawugui 2009-09-03
  • 打赏
  • 举报
回复
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脚本,然后在一行行改@_@).至于性能方面,还没时间详细测试,留在以后有空了再说!:)

lihan6415151528 2009-09-03
  • 打赏
  • 举报
回复
好吧,我承认我不懂分区表和分区索引
feixianxxx 2009-09-03
  • 打赏
  • 举报
回复

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧