定义VARCHAR2列的长度更大的影响

Pet*_*ang 24 sql oracle varchar2

当值不超过10字节时VARCHAR2(1000),VARCHAR2(10)使用Oracle 而不是Oracle 定义列有什么影响?

该列是否仅占用存储值所需的空间,还是会对表空间/索引的大小/性能产生负面影响?

Jef*_*emp 21

答案取决于您是在谈论数据库表中的列,还是PL/SQL程序中的变量.

数据库专栏

使用的存储量与存储的数据大小成比例.

PL/SQL变量

如果声明变量的大小为1到3999(11g +)/ 1999(10g或更早),则将为最大长度分配内存(即VARCHAR2(100)将需要至少100个字节的内存).

如果声明变量的大小为4000(11g +)/ 2000(10g或更早)或更大,则将根据存储的数据大小分配内存.(一个有趣的问题是,如果变量的值被更改,内存如何调整大小 - 是否重新分配具有新大小的另一个缓冲区?)

参考10g:PL/SQL数据类型

小VARCHAR2变量针对性能进行了优化,而较大的变量针对高效内存使用进行了优化.截止点是2000字节.对于2000字节或更长的VARCHAR2,PL/SQL动态分配足够的内存来保存实际值.对于短于2000字节的VARCHAR2变量,PL/SQL预先分配变量的完整声明长度.例如,如果将相同的500字节值分配给VARCHAR2(2000 BYTE)变量和VARCHAR2(1999 BYTE)变量,则前者占用500个字节,后者占用1999个字节.

  • 在PL/SQL问题上,PL/SQL动态分配内存的截止点已从版本更改为版本.例如,在10g中,它从<something>增加到2000,但在11.1中增加到4000.见http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/tuning.htm#BCGEGEEG (4认同)

Qua*_*noi 13

在数据库中,没有区别.VARCHAR2存储长度可变,声明的长度只是一个限制.

但是,某些客户端应用程序将保留1000每列的字节数,而不是10如果他们看到列被定义为VARCHAR2(1000)