在SQL Server中数据库中,所有的数据都是存放在数据文件当中的(日志数据除外)。数据最小的存储单位成为page(oracle为block),大小为8K(oracle可以自定义),虽然每个page的的容量为8192字节,但是要保留大约132字节的标题信息,所有page数据存放上限为8060字节。 当用户添加一笔数据时,SQL Server会将它存入改数据表对应的page。假如每笔数据长度为80字节,这可以推算每个page最多可以存入100笔数据(8060/80);如果要存入第101笔数据,SQL Server则会将他存入到第二个page中,以此类推。
如果按照此种方式存入数据有以下两个缺点
1.加重系统负担。如果要存入很多笔数据的话,要多次单独分配page。额外的I/O动作势必加重系统负担
2.可能产生空间不连续的情况。SQL Server配置的新的page有可能不在原先的page旁边,有可能被别的数据表占用了,这样对这个数据表的访问效率会打打折扣。为了避免上述问题,SQL Server每次会配置8个连续的page。称这连续的空间为extent(oracle也这样称呼),优点是:
1.同一个数据表的数据比较有机会存放于连续区域
2.减少SQL Server空间配置次数
注意:SQL Server数据库中,数据行不可跨越page!
(在oracle里面有行迁移,和行链接的情况,不知道SQL Server对长度大于page的存储方式是如何做的!)