将简单大对象存储在表空间或单独的 Blob 空间中

在磁盘上创建简单大对象列时,您可以选择将列数据存储在表空间或单独的 Blob 空间中。通常,可以通过将简单大对象数据存储在单独 Blob 空间中,并将智能大对象和用户定义的数据存储在智能大对象空间中来提高性能。

您还可以将简单大对象存储在光学介质上,但是此处的讨论不适用于用此法存储的简单大对象。

在以下示例中,TEXT 值存储在表空间中,而 BYTE 值存储在名为 rasters 的 Blob 空间中:
CREATE TABLE examptab 
   (
      pic_id SERIAL,
      pic_desc TEXT IN TABLE,
      pic_raster BYTE IN rasters
   )
有关在单独的 Blob 空间中存储简单大对象数据的信息,请参阅估计简单大对象占用的页数

TEXT 或 BYTE 值始终与表的行分开存储;只有 56 字节的描述符与行存储在一起。然而,简单大对象至少要占用一个磁盘页。 该描述符所指向的简单大对象可以与表行(同一表空间中的)驻留在磁盘上的同一组扩展数据块中,也可以驻留在单独的 Blob 空间中。

当简单大对象存储于表空间中时,它们的数据页面散布在许多包含行的页上,从而显著增加了表的大小。 当数据库服务器只读取行而不读取简单大对象时,磁盘臂必须比分开存储 Blob 页时移动得更远。 在以下情况中,数据库服务器只扫描行页:

另一个注意事项是,往来于数据库空间的磁盘 I/O 在数据库服务器的共享内存中进行缓冲。会将页进行存储,以防不久之后又需要这些页,并且在写入页时,在发生实际的磁盘写操作之前,请求程序可以继续处理。 然而,由于 Blob 空间数据预期会很大,因而往来于 Blob 空间的磁盘 I/O 不进行缓冲,并且直至所有的输出均写入 Blob 空间后,才允许请求程序继续进行。

为了获得最佳性能,在以下任何一种情况下均将简单大对象列存储在 Blob 空间中: