【澳门金沙vip】SQL server 2005的表分区_数据库其它_脚本之家

一 .聚集索引聚集索引的页级别包含了索引键,还包含数据页,因此,关于
除了键值以外聚集索引的叶级别还存放了什么的答案就是一切,也就是说,每行的所有字段都在叶级别种。另一种说话是:数据本身也是聚集索引的一部分,聚集索引基于键值保持表中的数据有序。SQL
SERVER 中,所有的聚集索引都是唯一的,如果在创建聚集索引时没有指定UNIQUE
关键字,SQL SERVER
会在需要时通过往记录中添加一个唯一标识符(Uniqueifier)在内部保证索引的唯一性,该唯一标识符是一个4字节的值,作为附加在聚集索引键的字段添加到数据中,只有那些声明为索引键字段并拥有重复值的行才会被添加。

下面来说下,在SQL SERVER
2005的表分区里,如何对已经存在的有数据的表进行分区,其实道理和之前在
依然在c盘的data2目录下建立4个文件夹,用来做4个文件组,然后建立数据库


.非聚集索引
对于非聚集索引,叶级别不包含全部的数据。除了键值以外,每个叶级别(树的最低层)中的索引行包含了一个书签(bookmark),告诉SQL
Server
可以在哪里找到与索引键相应的数据行。一个书签课能有两种格式。如果表上存在聚集索引,书签就是相应的数据行的聚集索引键。如果表是堆(heap)结构
,就是没有聚集索引的情况下 ,书签就是一个行标识符 row identifier,rid
,以 文件号 页号 槽号 的格式来定位实际的行。

use masterIF EXISTS (SELECT name FROM sys.databases WHERE name = N’Data
Partition DB3′)DROP DATABASE [Data Partition DB3]GOCREATE DATABASE
[Data Partition DB3]ON PRIMARY(NAME=’Data Partition DB Primary
FG3′,FILENAME=’C:\Data2\Primary\Data Partition DB Primary
FG3.mdf’,SIZE=5,MAXSIZE=500,FILEGROWTH=1 ),FILEGROUP [Data Partition
DB3 FG1](NAME = ‘Data Partition DB3 FG1′,FILENAME
=’C:\Data2\FG1\Data Partition DB3 FG1.ndf’,SIZE =
5MB,MAXSIZE=500,FILEGROWTH=1 ),FILEGROUP [Data Partition DB3 FG2](NAME
= ‘Data Partition DB3 FG2′,FILENAME =’C:\Data2\FG2\Data Partition DB3
FG2.ndf’,SIZE = 5MB,MAXSIZE=500,FILEGROWTH=1 ),FILEGROUP [Data
Partition DB3 FG3](NAME = ‘Data Partition DB3 FG3′,FILENAME
=’C:\Data2\FG3\Data Partition DB3 FG3.ndf’,SIZE =
5MB,MAXSIZE=500,FILEGROWTH=1 ),FILEGROUP [Data Partition DB3 FG4](NAME
= ‘Data Partition DB3 FG4′,FILENAME =’C:\Data2\FG4\Data Partition DB3
FG4.ndf’,SIZE = 5MB,MAXSIZE=500,FILEGROWTH=1 )然后建立一个数据表:USE
[Data Partition DB3]goCREATE TABLE MyTable(ID INT NOT NULL,Date
DATETIME,Cost money ) on [primary]并建立一个索引USE [Data Partition
DB3]goCREATE UNIQUE CLUSTERED INDEX MyTable_IXCON MyTable on
[PRIMARY]接下来往表里增加数据USE [澳门金沙vip,Data Partition DB3]godeclare
@count intset @count =-25while @count <=100begininsert into MyTable
select @count,getdate(),100.00set @count=@count+1endset @count =101while
@count <=200begininsert into MyTable select
@count,getdate(),200.00set @count=@count+1endset @count =201while @count
<=300begininsert into MyTable select @count,getdate(),300.00set
@count=@count+1endset @count =301while @count <=400begininsert into
MyTable select @count,getdate(),400.00set @count=@count+1endset @count
=401while @count <=800begininsert into MyTable select
@count,getdate(),500.00set
@count=@count+1end此时查询一下,可以看到数据都在一个表里select * from
sys.partitions where object_name=’MyTable’我们再建立表分区函数use
[Data Partition DB3]GOCREATE PARTITION FUNCTION [Data Partition
Range]AS RANGE LEFT FOR VALUES
这里表明分区的原则是四个分区,从负数到100,101-200,201-300,大于300当然,如果用right
for
values的话,就是从负数到99,100到199,200-299,和大于300最后,把表分区函数应用到文件组里USE
[Data Partition DB3]goCREATE PARTITION SCHEME [Data Partition
Scheme]AS PARTITION [Data Partition Range]TO ([Data Partition DB3
FG1], [Data Partition DB3 FG2], [Data Partition DB3 FG3],[Data
Partition DB3 FG4]);把原来建立好的表,移动到这个表分区里Drop index
MyTable_IXC on MyTable with (Move To [Data Partition Scheme]
最后看一看select * from sys.partitions where
object_name=’MyTable’可以看到,原来的表的数据被正确分拆到四个文件组里去了,实现了表分区

非聚集索引的存在与否并不影响数据分页的组织,因此每张表上并不像聚集索引那样只局限于拥有一个非聚集索引,SQL
Server 2005 每张表能够包含249 个非聚集索引SQL Server
2008每张表能够包含999 个非聚集索引,但是实际上所用到的比这个数要少的多。

三 .包含索引索引键字段数量限制是16个,总共900个字节大小
,包含性列只在叶级别中出现而且不以任何方式控制索引行的排序。它们的目的是使叶级别能够包含更多的信息从而更大地发挥覆盖索引(Covering
index)的索引调优能力.覆盖索引是一种非聚集索引,在其叶级别就可以找到满足查询的全部信息,这样sql
server就根本没有必要访问数据分页了,在一些情况下 sql serer
会悄悄的为索引添加一个包含性列。这可能发生在索引建立于分区表
也就是我今天是发的博客 O(∩_∩)O (partitioned table )上没有指定 on
filegroup 或者 no partition_scheme 的情况下。

一 .SQL SERVER 表分区介绍: SQL Server
引入的表分区技术,让用户能够把数据分散存放到不同的物理磁盘中,提高这些磁盘的并行处理性能以优化查询性能……

二 .SQL SERVER 数据库表分区由三个步骤来完成: