zoukankan      html  css  js  c++  java
  • 表和索引的结构(笔记)

    页是sql server存储数据的基本单位,大小为8k.(1024*8=8192字节),标头(header)占96个字节,在页尾维护的行指针占2个字节,还有其他几个保留的字节以备后用。行的小大为8060字节(大型对象数据除外),当行超过8060字节时,这些类型的值将被移动到一个称为行溢出分配单元的页中,而在原始页上保留一个24字节的指针,指向行外的数据。这样行就跨了多个页,但行内的数据仍然在8060字节的限制内。

    页是sql server可以读写的最小i/0单位,即使只须访问一行,sql server也要把整个页加载到缓存,再从缓存中读取数据。

    区是由8个物理上连续的页组成的单元。当表或索引需要更多的空间以存储数据时,sql server为对象分配一个完整的区。对于包含少量数据的对象,有一个例外:如果对象不足64KB,则当需要更多的空间时,sql server通常只分配一个单独的页,而不是整个区。页可以位于一个混合区内,混合区的8个页属于不同的对象。一些数据删除操作,如删除(drop)表或者清空(truncate)表,将释放整个区,这些操作将最小限度地被记录,因些,它们比完整记录日志的delete语句要快得多。些外一些读操作,如通常用于大型表或索引扫描的预读(read-ahead),可以在区级别,或是在更高的块级别上读取数据。 i/0操作中开销最大的部分是磁盘臂(disk arm)的移动,而真正的磁盘读写操作的开锁要小得多:因此读一个页和读取整个区所有的时间几乎一样长。

    表的组织方式

    表有两种组织方式:堆或b树。

    当在表上创建一个聚集索引时,表就组织为一个b树;否则就组织为一个堆。因为表必须按这两种方式中的一种进行组织(堆或b树),所以表的组织方式也称为HOBT.无论表是如何组织的,都可以在表上定义0个或多个非聚集索引。

    非聚集索引总是组织为b树。HOBT,以及非聚集索引可以在一个或多个称为分区(partition)的单元上实现。从技术上说,各分区上的HOBT和每个非聚集索引可以是不相同的。每个HOBT和非聚集索引的各分区将数据存储在称为分配单元(allocation unit)的一组页中。分配单元有下列三种类型:

    IN_ROW_DATA,ROW_OVERFLOW_DATA,LOB_DATA.IN_ROW_DATA用于存储所有固定长度的列,以及可变长的列(只要行大小不超过8060字节的限制)

    ROW_OVERFLOW_DATA用于存储不超过8000字节的varchar,nvarchar,varbinary,SQL_VARIAN和CLR用户自定义类型的数据,但因为行大小超过了8060字节的限制,而从原始行移动到了这里。LOB_DATA用于存储大型对象数据类型值。

    分配单元中存储的页集合由系统视图sys.system_internals_allocation_units中的页指针定位。

  • 相关阅读:
    Android 开发 深入理解Handler、Looper、Messagequeue 转载
    Android 开发 Handler的基本使用
    Java 学习 注解
    Android 开发 AlarmManager 定时器
    Android 开发 框架系列 百度语音合成
    Android 开发 框架系列 Google的ORM框架 Room
    Android 开发 VectorDrawable 矢量图 (三)矢量图动画
    Android 开发 VectorDrawable 矢量图 (二)了解矢量图属性与绘制
    Android 开发 VectorDrawable 矢量图 (一)了解Android矢量图与获取矢量图
    Android 开发 知晓各种id信息 获取线程ID、activityID、内核ID
  • 原文地址:https://www.cnblogs.com/heqianjin/p/2590908.html
Copyright © 2011-2022 走看看