SQL Server 2008数据库学习笔记

数据库 SQL Server
本文我们对SQL Server 2008数据存储体系结构、表分区以及面向查询索引的索引策略进行了总结,希望能够对您有所帮助。

近几年来,SQL Server 2008数据库由于其操作简单、功能强大已经被越来越多的人使用。对于初学者来说,学习SQL Server 2008时会或多或少的存在一些困惑,本文我们总结了一些SQL Server 2008数据库的一些知识,希望能够对您有所帮助。

SQL SERVER数据存储体系结构

SQL SERVER 把数据存储在磁盘上,但为了提高性能和完整性,它优化了磁盘结构的格式,磁盘上的数据是最近一次由内存刷新到磁盘上的状态.内存数据是最新的,数据修改一般是先在内存中进行,而不是直接写入到磁盘.

物理数据结构

一个数据库至少有一个数据文件与事务日志文件.

数据文件存储数据库的所有信息,包括数据值,索引和配置数据和可编程对象.事务日志文件提供一个对数据库所有修改的持久记录.SQL Server采用预写的修改过程,即所有的修改在写入数据库之前都必须先写进事务日志.这些日志使各种数据恢复和完整性功能得以实现。

8k的块来组织,称为页面.8个页面又被组织为区.

数据页面:数据页面存储所有的数据值,但不包含那些大值类型,如text,ntext,xml,varchar(max).

索引页面:存储聚集索引条目和非聚集索引条目.

大型对象页面:由于SQL Server数据行不能跨越页面,所以大型数据值必须通过指针放到其他地方,指向存放数据条目的大型数据页面.Varchar类似的类型会根据大小动态地在数据页面与大型对象页面转换.

其他页面:GAM SGAM PFS等,存储页与区分配使用情况的页面.

SGAM专门监控混合区,用一位来标识混合区是否还有空闲页面.

内存体系结构

存储数据的内存组织结构,也叫数据缓存或缓冲缓存.类似于物理磁盘的组织结构,内存组织成8KB单元大小的缓冲池来存储数据页面.

客户端工作站向SQL Server提交一个查询,首先解析优化查询,并编译成数据引擎可遵循的查询计划,尝试定位到内存缓冲区中的页,提取必须的数据值,然后以一个表格式数据流(TDS)返回给客户端,如果不在缓冲区中,则会产生一个I/O请求去磁盘读取一个页面到内存中.

内存缓冲区有三种状态:空闲,可用与脏的.

需要明白的是SQL Server的IO,都是通过WINDOWS来执行的,所有的硬件也是通过windows来管理的,SQL Server通过OS来处理,本身不直接管理.

表分区

1.创建分区函数

 

  1. CREATE PARTITION FUNCTION DATEPARTITION(DATETIME)  
  2.  
  3. AS RANGE RIGHT  
  4.  
  5. FOR VALUES ('01/01/2007','01/01/2008') 

 

这个示例分了三个区,一个是2007/01/01之前的数据,不包含这一天.然后是2007/01/01到2008/01/01(不包含)之间的数据,然后是2008/01/01及其以后的数据。

2.创建分区方案

 

  1. CREATE PARTITION SCHEME dateScheme  
  2.  
  3. AS PARTITION DATEPARTITION  
  4.  
  5. TO ([FG1],[FG2],[PRIMARY])  
  6.  
  7. GO 

 

分区方案末端的文件组表示分区将放置在哪里.

3.创建分区表

 

  1. CREATE TABLE partitiontable  
  2.  
  3. (id INT NOT NULL IDENTITY(1,1),  
  4.  
  5. datevalue DATETIME NOT NULL)  
  6.  
  7. ON dateScheme(DATEVALUE) 

 

插入测试数据后并查看

 

  1. INSERT INTO  partitiontable (datevalue) VALUES('2006-6-6 12:00:00')  
  2.  
  3. INSERT INTO  partitiontable (datevalue) VALUES('2007-6-6 12:00:00')  
  4.  
  5. INSERT INTO  partitiontable (datevalue) VALUES('2008-6-6 12:00:00') 

 

查看:

 

  1. SELECT   
  2.  
  3. partition_id,  
  4.  
  5. PARTITION_number,  
  6.  
  7. ROWS  
  8.  
  9. FROM sys.partitions  
  10.  
  11. WHERE object_idobject_id=object_id('partitiontable') 

 

面向查询索引的索引策略

表的存储HOBT,根据是否有索引来决定。

在堆中查询数据的基本方式是执行全表扫描,表是基于数据页存储的,因此表扫描就是对扫描存储该表的数据页,并从中提取所需的数据。这表明堆上进行数据查询的I/O开销应该与对应的数据页数基本相当。

我们应该创建什么样的索引呢?创建查询优化器实际会使用的索引,创建能减少I/O的索引。

相对于响应时间,优化器更关注于吞吐量,优化器使用静态的统计数据,必要时使用手动更新,UPDATE STATISTICS即可刷新需要的统计页。优化器需要结构良好的查询。SQL SERVER 对每个表只使用一个索引(有例外)。

关于SQL Server 2008数据库的知识就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. SQL Server 2005数据库nolock使用详解
  2. SQL Server 2005无法连接到本地服务器的解决
  3. SQL Server如何查询当前服务器有多少连接请求
  4. SQL Server通过整理索引碎片和重建索引提高速度
  5. SQL Server 2008安装无法通过性能计数器一致性的解决
责任编辑:赵鹏 来源: 博客园
相关推荐

2011-08-19 15:13:36

SQL Server MDX查询

2009-04-10 15:37:48

SQL Server2镜像实施

2009-03-19 09:30:59

2010-08-27 09:59:51

SQL Server

2011-08-25 13:41:50

SQL Server 变更跟踪

2011-09-07 15:11:31

SQL Server同步

2011-08-09 17:24:21

SQL Server 数据库日志

2011-08-16 18:11:13

SQL Server 手动提交

2010-07-15 17:28:50

SQL Server

2021-03-19 07:12:23

SQL Server数据库数据库收缩

2021-03-24 14:50:00

SQLServer数据库字符串

2010-12-17 09:11:41

SQL Server

2011-07-25 12:56:44

SSMAOracle数据库SQL Server

2010-07-16 10:29:02

SQL Server

2010-07-06 13:22:13

SQL Server

2017-03-15 16:45:02

SQL Server 数据库分配用户

2010-09-13 14:45:56

SQL Server

2010-07-06 14:00:51

SQL Server

2011-08-16 18:00:15

MyEclipseSQL Server

2010-07-22 14:52:00

SQL Server
点赞
收藏

51CTO技术栈公众号