≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > SQL Server

SQLSERVER 表分区操作和设计方法

人气:948 时间:2019-05-10

这篇文章主要为大家详细介绍了SQLSERVER 表分区操作和设计方法,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

一 .聚集索引

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


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

非聚集索引的存在与否并不影响数据分页的组织,因此每张表上并不像聚集索引那样只局限于拥有一个非聚集索引,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 数据库表分区由三个步骤来完成:

 1.创建分区函数

 2.创建分区架构

 3.对表进行分区

 基于缓存更新机制,我使用时间来进行分区,这里大家根据业务的要求使用合适的字段来作为分区

创建数据库分区文件数量,这里存储一年的数据分成十二个分区,需要现在D盘建立好Data 的文件夹 里面包含Primary 文件夹和 FG1 FG2 FG3 FG4............

代码如下:


IF EXISTS (SELECT name FROM sys.databases WHERE name = N'AirAvCache') 
DROP DATABASE [AirAvCache] 
GO 
CREATE DATABASE [AirAvCache] 
ON PRIMARY 
(NAME='Data Partition DB Primary FG', 
FILENAME= 
'D:\Data\Primary\AirAvCache Primary FG.mdf', 
SIZE=5, 
MAXSIZE=500, 
FILEGROWTH=1 ), 
FILEGROUP [AirAvCache FG1] 
(NAME = 'AirAvCache FG1', 
FILENAME = 
'D:\Data\FG1\AirAvCache FG1.ndf', 
SIZE = 5MB, 
MAXSIZE=500, 
FILEGROWTH=1 ), 
FILEGROUP [AirAvCache FG2] 
(NAME = 'AirAvCache FG2', 
FILENAME = 
'D:\Data\FG2\AirAvCache FG2.ndf', 
SIZE = 5MB, 
MAXSIZE=500, 
FILEGROWTH=1 ), 
FILEGROUP [AirAvCache FG3] 
(NAME = 'AirAvCache FG3', 
FILENAME = 
'D:\Data\FG3\AirAvCache FG3.ndf', 
SIZE = 5MB, 
MAXSIZE=500, 
FILEGROWTH=1 ), 
FILEGROUP [AirAvCache FG4] 
(NAME = 'AirAvCache FG4', 
FILENAME = 
'D:\Data\FG4\AirAvCache FG4.ndf', 
SIZE = 5MB, 
MAXSIZE=500, 
FILEGROWTH=1 ), 
FILEGROUP [AirAvCache FG5] 
(NAME = 'AirAvCache FG5', 
FILENAME = 
'D:\Data\FG5\AirAvCache FG5.ndf', 
SIZE = 5MB, 
MAXSIZE=500, 
FILEGROWTH=1 ), 

FILEGROUP [AirAvCache FG6] 
(NAME = 'AirAvCache FG6', 
FILENAME = 
'D:\Data\FG6\AirAvCache FG6.ndf', 
SIZE = 5MB, 
MAXSIZE=500, 
FILEGROWTH=1 ), 


FILEGROUP [AirAvCache FG7] 
(NAME = 'AirAvCache FG7', 
FILENAME = 
'D:\Data\FG7\AirAvCache FG7.ndf', 
SIZE = 5MB, 
MAXSIZE=500, 
FILEGROWTH=1 ), 

FILEGROUP [AirAvCache FG8] 
(NAME = 'AirAvCache FG8', 
FILENAME = 
'D:\Data\FG8\AirAvCache FG8.ndf', 
SIZE = 5MB, 
MAXSIZE=500, 
FILEGROWTH=1 ), 

FILEGROUP [AirAvCache FG9] 
(NAME = 'AirAvCache FG9', 
FILENAME = 
'D:\Data\FG9\AirAvCache FG9.ndf', 
SIZE = 5MB, 
MAXSIZE=500, 
FILEGROWTH=1 ), 

FILEGROUP [AirAvCache FG10] 
(NAME = 'AirAvCache FG10', 
FILENAME = 
'D:\Data\FG10\AirAvCache FG10.ndf', 
SIZE = 5MB, 
MAXSIZE=500, 
FILEGROWTH=1 ), 

FILEGROUP [AirAvCache FG11] 
(NAME = 'AirAvCache FG11', 
FILENAME = 
'D:\Data\FG11\AirAvCache FG11.ndf', 
SIZE = 5MB, 
MAXSIZE=500, 
FILEGROWTH=1 ), 

FILEGROUP [AirAvCache FG12] 
(NAME = 'AirAvCache FG12', 
FILENAME = 
'D:\Data\FG12\AirAvCache FG12.ndf', 
SIZE = 5MB, 
MAXSIZE=500, 
FILEGROWTH=1 ) 

创建好后如图:
【图片暂缺】

打开FG1 文件夹 看到多了AirAvCacheFG1.ndf 文件
【图片暂缺】
创建分区函数
代码

代码如下:

 
USE AirAvCache 
GO 
-- 创建函数 
CREATE PARTITION FUNCTION [AirAvCache Partition Range](DATETIME) 
AS RANGE LEFT FOR VALUES ('2010-09-01','2010-10-01','2010-11-01','2010-12-01','2011-01-01','2011-02-01','2011-03-01','2011-04-01','2011-05-01','2011-06-01','2010-07-01'); 

创建分区架构
代码

代码如下:

 
CREATE PARTITION SCHEME [AirAvCache Partition Scheme] 
AS PARTITION [AirAvCache Partition Range] 
TO ([AirAvCache FG1], [AirAvCache FG2], [AirAvCache FG3],[AirAvCache FG4],[AirAvCache FG5],[AirAvCache FG6],[AirAvCache FG7],[AirAvCache FG8], 
[AirAvCache FG9],[AirAvCache FG10],[AirAvCache FG11],[AirAvCache FG12]); 

创建一个使用AirAvCache Partitiion Scheme 架构的表

代码如下:

 
CREATE TABLE [dbo].[AvCache]( 
[CityPair] [varchar](6) NOT NULL, 
[FlightNo] [varchar](10) NULL, 
[FlightDate] [datetime] NOT NULL, 
[CacheTime] [datetime] NOT NULL DEFAULT (getdate()), 
[AVNote] [varchar](300) NULL 
) ON [AirAvCache Partition Scheme] (FlightDate); --注意这里使用[AirAvCache Partition Scheme]架构,根据FlightDate 分区 


查询分区情况

代码如下:

 
-- 查看使用情况 
SELECT *, $PARTITION.[AirAvCache Partition Range](FlightDate) 
FROM dbo.AVCache 

可以看到9 月和 10 月已经分开了。
【图片暂缺】

 

本文来自:http://www.q1010.com/179/7336-0.html

注:关于SQLSERVER 表分区操作和设计方法的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:SQL SERVER

您可能感兴趣的文章

  • SQLServer 中的死锁说明
  • ASP.NET下向SQLServer2008导入文件实例操作方法
  • 用sql脚本创建sqlserver数据库范例语句
  • 用sql脚本创建sqlserver数据库触发器范例语句
  • sqlserver 模糊查询常用方法
  • sqlserver中distinct的用法(不重复的记录)
  • sqlserver中Case的使用方法(上下篇)第1/2页
  • SQLSERVER快速有条件删除海量数据
  • 分页 SQLServer存储过程
  • Microsoft SQLServer的版本区别及选择
上一篇:关于存储过程的编写的一些体会
下一篇:sqlserver中Case的使用方法(上下篇)第1/2页
热门文章
  • SQL Server SQL获取第一条记录的方法
  • SQL Server出现System.OutOfMemoryException异常的解决方法
  • SQL Server的 update from 语句的简单示例
  • SQL Server 数据库备份方法菜鸟教程
  • SQL Server 多表关联时在where语句中慎用trim()方法
  • SQL Server数据类型及长度限制详细说明
  • mybaits非配置原因,导致SqlSession was not registered for synchronization异常解析
  • SQL Server 收缩后对数据库的使用有影响吗?
  • SQL Server 格式导致的Excel导入sql出现异常的解决方法
  • SQL Server 连接服务器出现错误 7391的解决方法
  • 最新文章
    • SQL Server存储过程基本语法的简单示例
    • sql查询时增加自动编号和分页的简单示例
    • sql轻松应付百万数据的高效数据分页存储过程的简单示例
    • sql获取一条数据中所有字段的名称和值的实现方法
    • sql分割函数的简单示例
    • SQL Server异常捕获的简单示例
    • SQL SERVER回滚恢复误操作数据的实现方法
    • SQL Server函数或存储过程中抛出异常的实现方法
    • SQL Server创建数据库的完整代码
    • SQL Server创建数据库的命令用法示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。