从物理结构上谈一谈SQL Server数据库的优化


  本文标签:SQL Server 页

  我们知道,SQL Server中数据存储的基本单位是  。为数据库中的数据文件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0 到 n 连续编号)  。磁盘 I/O 操作在页级执行  。也就是说,SQL Server 读取或写入所有数据页  。

  平时在通过SQL Server Profiler 或者打开Statistics IO 选项时看到物理读,逻辑度的单位都是页  。

  在SQL Server 中,页的大小为8KB  。这意味着SQL Server数据库中每MB有128 页  。每页的开头是96 字节的标头,用于存储有关页的系统信息  。此信息包括页码、页类型、页的可用空间以及拥有该页的对象的分配单元 ID  。

  下表说明了SQL Server 数据库的数据文件中所使用的页类型  。

  
页类型 内容

  Data

  当 text in row 设置为 ON 时,包含除 text、 ntext、image、nvarchar(max)、varchar(max)、varbinary(max) 和 xml 数据之外的所有数据的数据行  。

  Index

  索引条目  。

  Text/Image

  大型对象数据类型:

  • text、 ntext、image、nvarchar(max)、varchar(max)、varbinary(max) 和 xml 数据  。

     

  数据行超过 8 KB 时为可变长度数据类型列:

  • varchar、nvarchar、varbinary 和 sql_variant

     

  Global Allocation Map、Shared Global Allocation Map

  有关区是否分配的信息  。

  Page Free Space

  有关页分配和页的可用空间的信息  。

  Index Allocation Map

  有关每个分配单元中表或索引所使用的区的信息  。

  Bulk Changed Map

  有关每个分配单元中自最后一条 BACKUP LOG 语句之后的大容量操作所修改的区的信息  。

  Differential Changed Map

  有关每个分配单元中自最后一条 BACKUP DATABASE 语句之后更改的区的信息  。

  在数据页上,数据行紧接着标头按顺序放置  。页的末尾是行偏移表,对于页中的每一行,每个行偏移表都包含一个条目  。每个条目记录对应行的第一个字节与页首的距离  。行偏移表中的条目的顺序与页中行的顺序相反  。

  数据行存储在页上,超出页大小如此  。

  2个原则:

  表设计:Row 要占用尽可能短的长度,占用少的空间,让一个page上存储更多的row,这样在相同的读次数下,获取到的数据就更多了  。

  查询:Select的时候,别动不动就来个*,因为当row 中有Image,text等,或者本身变长字段vchar等加起来的长度超过了8k,就会需要去 

  ROW_OVERFLOW_DATA 中去读取一次  。增加了读的开销  。当然从网络等开销来说也不建议用*   。

  关于SQL Server数据库从存储页方面的优化措施就介绍到这里了,希望本次的介绍能够对您有所收获!