在对sybase ase 15.7中的in-row
和off-row
功能进行了一些研究后,我在包含IMAGE和TEXT列的表中有一些块(类似于此SO question)可以改善性能(如果逻辑存储区中的大小小于4k,则LOB数据将与表值的同一页(即行more info here)一起放置。
任何人都可以解释:
-如何在数据库上启用此功能?使用create table命令启用了它吗?或更改表?
-如何检查其是否启用?
-为什么它可能减少或移除块?
-为什么Text / image数据类型可能会导致锁定/阻止,并且启用行将其删除?
答案 0 :(得分:2)
您必须通过针对现有表的列的alter table启用每个列的选项,或者如果它是针对该列的新表,则可以设置该选项:
alter table tablename modify mycol in row (500)
这里我说过,任何少于500字节长度的列都将存储在行中,任何超出该长度的内容将存储在行外(旧的默认行为)。这样可以大大缩小表的大小,因为在表中有很多非常小的text / image列和很大的页面,因为这样可以避免浪费文本链中每行的整个页面。
启用后,它将在sp_help输出中的列上显示。要检查是否有好处,您需要考虑:
您必须将数据重新加载到表中才能使更改生效,因此可以通过选择进入(以创建表和数据的新副本)或通过BCP输出/输入来实现。
此处的Sybase文档中有更多信息:
在阻塞方面,数据符合条件并保存在行中,将从表本身而不是从文本链读取数据,而文本链实际上是表末尾的一大堆数据。您还可以从表大小上节省大量空间(这取决于数据大小),从而减少IO,从而提高性能。