我正在添加一个数据类型为varchar2(1000)的列,此列将用于存储大量消息(大约(600个字符)。)它是否会影响具有大数据类型长度的查询性能,如果是这样的话?偶尔会有一个查询选择该列的查询。即使某些地方的字段中的值有100个字符,表是否会占用额外的内存?
答案 0 :(得分:4)
是否会影响性能?这取决于。
如果“添加列”意味着您现有的表中包含要添加新列的现有数据,是否要为旧数据填充新列?如果是这样,根据您的PCTFREE
设置和行的现有大小,将每行的大小平均增加600字节可能会导致行迁移,这可能会增加查询的I / O量需要执行以获取一行。您可能希望使用新列创建新表,并将旧数据移动到新表,同时如果需要考虑这一点,则填充新列。
如果您的查询涉及表格上的全表扫描,那么您所做的任何增加表格大小的内容都会对这些查询的速度产生负面影响,因为他们现在必须阅读更多数据。
增加行的大小时,会减少每个块的行数。这会增加缓冲区缓存的压力,因此你要么从这个表中缓存更少的行,要么你会更快地老化其他一些块。其中任何一个都可能导致单个查询执行更多物理I / O而不是逻辑I / O,因此运行时间更长。
VARCHAR2(1000)
只会使用实际需要的任何空间来存储特定值。如果某些行只需要100个字节,那么Oracle只会在块中分配100个字节。如果其他行需要900个字节,Oracle将在块中分配900个字节。