大型数据类型长度对Oracle性能的影响?

大型数据类型长度对Oracle性能的影响?,oracle,database-design,oracle11g,sql-tuning,Oracle,Database Design,Oracle11g,Sql Tuning,我正在添加一个数据类型为varchar2(1000)的列,该列将用于存储一大组消息(大约600个字符)。对于数据类型长度较大的查询,它会影响查询的性能吗?如果会,如何影响?我会让查询偶尔选择该列。即使该字段中的值在某些位置为100个字符,表是否会在此处消耗额外内存?它会影响性能吗?这取决于具体情况 如果“添加列”意味着您有一个包含现有数据的现有表,您正在向其中添加新列,是否要为旧数据填充新列?如果是,根据您的PCTFREE设置和行的现有大小,将每行的大小平均增加600字节很可能会导致行迁移,这可

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

它会影响性能吗?这取决于具体情况

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

如果查询涉及表上的完整表扫描,则任何增加表大小的操作都会对这些查询的速度产生负面影响,因为它们现在必须读取更多数据

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


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

这会影响性能吗?这取决于具体情况

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

如果查询涉及表上的完整表扫描,则任何增加表大小的操作都会对这些查询的速度产生负面影响,因为它们现在必须读取更多数据

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


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

谢谢!它回答了我的问题。提供如此大的数据类型长度是一种好的做法吗在OLTP表中?@user3225011-使用适当的数据类型,为需要存储的数据使用适当的长度,这是一种很好的做法。如果需要存储多达1000字节的数据,则
VARCHAR2(1000)
在任何类型的应用程序中都是非常合适的。如果确实需要存储更少(或更多)的数据一个不同的数据类型是合适的。谢谢!它回答了我的问题。在OLTP表中给出如此大的数据类型长度是一个好的做法吗?@user3225011-使用适当的数据类型是一个好的做法,它为您需要存储的数据使用适当的长度。如果您需要存储多达1000字节的数据,a
VARCHAR2(1000)
适用于任何类型的应用程序。如果确实需要存储较少(或较多)的数据,则可以使用不同的数据类型。