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

标签 sql oracle varchar2

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

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

最佳答案

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

数据库栏目

使用的存储量与存储的数据大小成正比。

PL/SQL 变量

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

如果变量声明的大小为 4001 (11g+)/2000(10g 或更早版本)或更大,则将根据存储的数据大小分配内存。 (一个有趣的附带问题是,如果变量的值发生变化,内存是如何调整大小的——它是否会重新分配另一个具有新大小的缓冲区?)

10g 引用:PL/SQL Datatypes

Small VARCHAR2 variables are optimized for performance, and larger ones are optimized for efficient memory use. The cutoff point is 2000 bytes. For a VARCHAR2 that is 2000 bytes or longer, PL/SQL dynamically allocates only enough memory to hold the actual value. For a VARCHAR2 variable that is shorter than 2000 bytes, PL/SQL preallocates the full declared length of the variable. For example, if you assign the same 500-byte value to a VARCHAR2(2000 BYTE) variable and to a VARCHAR2(1999 BYTE) variable, the former takes up 500 bytes and the latter takes up 1999 bytes.



11g 引用:Avoiding Memory Overhead in PL/SQL Code

Specify a size of more than 4000 characters for the VARCHAR2 variable; PL/SQL waits until you assign the variable, then only allocates as much storage as needed

关于sql - 定义更大长度的 VARCHAR2 列的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1882073/

相关文章:

oracle - 如何获取 PeopleCode 中 SQL 对象的列名?

java - 在同一个 PL/SQL 查询中选择和更新

Oracle - 与 Varchar 列相比,包含少于 4K 行的行的 CLOB 列是否有任何性能影响?

java - ORA-12899: 列的值太大,即使异常中的值较小

mysql varchar 列的聚合函数

.net - 将空白字段值传递给存储过程 ASP .NET C#

mysql - SQL 无法弄清楚如何正确连接

c# - 使用自定义列名映射外键

python - cursor.fetchall() 和 pandas Dataframe 之间的区别

sql - 如何下载网页并用SQL解析