日期:2014-05-18 浏览次数:20718 次
--不能为了插入操作而删除索引,因为重建索引会导致表几个小时不能使(不知道创建索引的online选项)
--分区函数不能将函数应用于不是定义为整数数据类型或者不能隐式转换为整数数据类型的列
create partition function partfunc(int) as
range right for values(60,70,90);
--删除分区函数
drop partition function partfunc
--创建数据库,要和分区方案去匹配的
use master
go
create database carla
on primary
(
name=carla,
filename='C:\carla.mdf'
),
filegroup fg1
(
name=fg1,
filename='C:\fg1.ndf',
size=2Mb
),
filegroup fg2
(
name=fg2,
filename='c:\fg2.ndf',
size=2mb
),
filegroup fg3
(
name=fg3,
filename='D:\fg3.ndf',
size=2mb
),
filegroup fg4
(
name=fg4,
filename='E:\fg4.ndf',
size=2mb
)
log on
(
name=carla_log,
filename='E:\log.ldf',
size=2mb,
filegrowth=15%
);
go
-- 创建分区方案,并把他映射到响应的组下
use carla
go
create partition scheme partscheme as
partition partfunc to
(
fg1,fg2,fg3,fg4
)
go
--查询分区
select * from sys.partition_functions
--查询分区方案,和分区范围值
select * from sys.partition_range_values
--创建分区表
create table sc
(
sno int identity(1,1) primary key,
cno int,
grade int
)
--插入测试数据
declare @i int=1,@x int=90
while @i<@x
begin
insert into sc
select @i,@x
set @i=@i+1
end
select * from dbo.sc
--查看表分区
select * from sys.partitions
where object_id=object_id('dbo.sc')
--第四分区所有数据,因为最大sno 89
select * from dbo.sc
where $partition.partfunc (sno)=3
--为第四分区插入数据
insert into sc
select 95,80
--查询某个数字在第几分区
select $partition.partfunc(89) as partitionNum
--查询每个分区的行数
select $partition.partfunc(sno) as partitionNum,
COUNT(1) as numRows from dbo.sc
group by $partition.partfunc(sno)
order by $partition.partfunc(sno);
--删除一个边界点
alter partition function partfunc()
MERGE RANGE (90)
--分区的分割合并,合并一个边界点
alter partition function partfunc()
SPLIT RANGE (90)
------解决方案--------------------
查询慢在哪里?可以先把重点放在优化查询语句上,比如索引。SQL2000有些新功能用不上,SQL2005就可以通过复合索引的方式处理WHERE子句后面的字段。
------解决方案--------------------