none
但是我在向同一个表的第二条记录的Image字段写入4k数据后,表的大小又增加了8k,这是不是说明对于表中的每一条记录的Image数据SQL Server都为其分配8k的空间? RRS feed

  • 问题

  • 但是我在向同一个表的第二条记录的Image字段写入4k数据后,表的大小又增加了8k,这是不是说明对于表中的每一条记录的Image数据SQL Server都为其分配8k的空间?
    2007年8月6日 6:03

答案

  • 当text in row设置为OFF的情况下,虽然 text、ntext 和 image 列的数据在 B 树内按逻辑排列,但根节点和各数据块却分布在整个表的 text、ntext 和 image页链内。根节点和各个数据块放置在任何可用的空间内。每个数据块的大小由应用程序写定的大小决定。小数据块组合在一起填充一页。如果数据量少于 64 字节,则全都存储在根结构中。
    例如,如果应用程序先写入一个 1 KB 的 image 数据,则该数据作为行的第一个 1 KB 的 image 数据块存储。如果应用程序随后写入一个12 KB 的 image 数据,则将 7 KB 和刚才的 1 KB 的块组合在一起,这样第一个块就是 8 KB。剩下的 5 KB 形成第二个 image数据块。(每个 text、ntext 或 image 页的实际容量是 8080 字节的数据。)。
    4k =(1024 bytes/k x 4k) 4096,
    8K=(1024 bytes/k x 8k) 8192>8080,
    所以当你增加了一个4K的数据后,SQL SERVER分配给其一页,当你再增加一个新的4K的数据时,刚分配的一页的剩余空间已经不足以存放,所以SQL SERVER又为其分配了一个新页(8K)。
    2007年8月6日 6:07