create table t1(
f1 varchar2(10),
f2 varchar2(10),
f3 varchar2(10),
f4 varchar2(10),
f5 varchar2(10)
)create table t2(
f1 varchar2(4000),
f2 varchar2(4000),
f3 varchar2(4000),
f4 varchar2(4000),
f5 varchar2(4000)
)
上述两个表定义在实际存储数据长度为10个以内字符时,其存储效率,查询性能上有什么区别?
f1 varchar2(10),
f2 varchar2(10),
f3 varchar2(10),
f4 varchar2(10),
f5 varchar2(10)
)create table t2(
f1 varchar2(4000),
f2 varchar2(4000),
f3 varchar2(4000),
f4 varchar2(4000),
f5 varchar2(4000)
)
上述两个表定义在实际存储数据长度为10个以内字符时,其存储效率,查询性能上有什么区别?
解决方案 »
- oracle告警日志的ORA-00600错误
- pl sql建表的时候,为什么写的注释在点“应用之后”都变成问号了?
- ORACLE PL\SQL Developer工具执行计划无COST和cardinality,bytes等列值显示问题
- 同样的查询语句在pl/sql 中执行0.296s 在存储过程中执行要3.9s 请问为何差距这么大?有没有什么办法解决?
- 起始时间、截止时间验证
- 怎么解决Dual表的序号问题
- 怎样监控表空间使用情况?
- 怎么把oracle中两个字段相加,生成一个字段!?
- 求助:哪里可以找到OCI的中文资料???
- 我是个初学者,请各位高手帮助以下,我进入SQL*Plus时连接数据库怎么一直是连接失败?
- Oracle中使用触发器
- ORACLE无规律数据的查询问题!请大家赐教!
效率上没什么差别,反正VARCHAR 本身就是可变长度的
现举两个出问题的例子:
1.如果你的表中存在多个varchar2(4000)的列,将导致不能创建符合index,创建时报ora-01450错误。
没有符合index,很多时候势必影响应用效率。
2.假如你定义了varchar2(4000),那么对于应用代码来说,我必须定义String length为4000的变量来容纳列中的值,因为应用不知道你的列的最大length是10啊,也就是说应用服务器必须额外的分配一些浪费的内存来存储取得的列值;大量的这量代码的存在,消耗了宝贵的内存,必然导致应用效率下降。所以说,用多少字节,定义多少字节的,不要随便用varchar2的极限。
定义varchar2(4000)最多可存储4000个字符
建议按实际需求定义,即按最长的字符串长度来定义。
不然oracle早就推出不需要设置长度的字符变量类型了。
说的对!
--------
oracledbalgtu 说的也很有道理!!
在数据结构的设计上,应该根据实际需求权衡设计。