1

我正在添加一个数据类型为 varchar2(1000) 的列,该列将用于存储大量消息(大约(600 个字符)。它是否会影响具有大数据类型长度的查询的性能,如果是这样呢?我会偶尔会有一个查询选择该列。即使在某些地方该字段中的值是 100 个字符,表是否会在此处消耗额外的内存?

4

1 回答 1

4

会影响性能吗?这取决于。

如果“添加列”意味着您有一个包含要添加新列的现有数据的现有表,那么您是否要为旧数据填充新列?如果是这样,根据您的PCTFREE设置和行的现有大小,将每行的大小平均增加 600 字节很可能会导致行迁移,这可能会增加查询需要执行以获取的 I/O 量一排。您可能希望使用新列创建一个新表,并将旧数据移动到新表,同时填充新列,如果这是一个问题。

如果您的查询涉及对表进行全表扫描,那么您所做的任何增加表大小的操作都会对这些查询的速度产生负面影响,因为它们现在必须读取更多数据。

当您增加行的大小时,您会减少每个块的行数。这往往会增加缓冲区缓存的压力,因此您要么从该表中缓存更少的行,要么更快地老化一些其他块。其中任何一个都可能导致单个查询执行更多的物理 I/O 而不是逻辑 I/O,因此运行时间更长。

AVARCHAR2(1000)只会使用实际需要的空间来存储特定值。如果某些行只需要 100 个字节,Oracle 将只在块内分配 100 个字节。如果其他行需要 900 个字节,Oracle 将在块内分配 900 个字节。

于 2014-01-24T20:45:13.103 回答