表内部结构


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

总结页结构:
1 ,查看方法:
查找所有数据的结构,里面会有文件号,页号等信息
DBCC IND( Business ,Fixed ,- 1)
通过上述得到文件号,页号,执行以下得到数据结构
DBCC TRACEON( 3604 )
DBCC PAGE( Business ,1 , 3394, 1 )
 
2 ,明细解释:
页大小为 KB ,字节,由页面报头,数据行及行偏移矩阵组成。
DBCC PAGE 输出
分为个主要段落
      1  BUFFER: 给定页面的缓冲信息,指一种内存的结构,仅当前页面处于内存中时才有意义。
      2  PAGE HEADER: 该页面上的所有报头字段信息,占据前个字节。
      3  DATA:每条记录的信息,占据字节。
      4  OFFSET TABLE 显示了行偏移矩阵的内容,占据字节。
DATA 结构说明:
通过上述 sql 查看偏移量。
之后是具体的固定长度字符内容
STATUS Bits A     2 
STATUS Bits A     2 
固定字段大小       4 
固定字段数据        固定字段大小 4
固定字段数量       4 
空位图       
变长字段数量       4 
变长字段偏移量     2 *变长字段数量
变长字段数据
注:个字节用两位存储
16 进制转换成具体数据方法:,若表示的是数字如固定字段长度或字段本身是整型,则要从后向前转换(因数字字段是先存储低字节的),若是
字符,则用每两位的表示转成 ASCII 码即可。
 
3 ,观察数据结构作用:
1 )字段长度改小,观察前后数据变化,发现是一样的,原数据是不会删除的,只是在查询时不显示出来,在插入的时候增加范围限制。
这也解释了为什么表字段改小后,数据量没有什么变化,因为它并不执行删除,以保证高效率。由此了解数据库空间增大后,数据删除并没有相应的空间减少的原因,若想真正删除,重建聚集索引即可。
 
2 )将字段长度用 ALTER方式改大,观察前后数据变化,发现多出了一列,原有的数据列也保留,这也解释了在表设计情况下,进行结构的更改如字段长度变大变小,最后让
SQLSERVER 生成SQL 语句,为什么是建立新表,重建,而不是直接生成 alter 的原因,因为 sqlserver知道直接 alter 的话原数据是不会删除的。
还有一种情况是对列进行位置的调动,用 sqlserver 生成语句,也是建新表操作的,原因是新增加的列总是获得目前最高的 column_id 的下一个值,而列的
顺序也是按 column_id 进行的。
即:用 alter 更改表时,为尽可能避免对每一行数据的改动(要检查每一行,写日志,比较费时耗资源),一般原行的数据是保留的。
字段更小:原数据并不执行删除,保留,只是缩小入口与出口。
字段更大,直接新建一列,而不是进行字段的扩充。
更改字段的顺序,字段的顺序一经建立就是固定的,因为是据 column_id 来排序的,故更改表的顺序要重建表。