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个以内字符时,其存储效率,查询性能上有什么区别?

解决方案 »

  1.   

    对的,
    效率上没什么差别,反正VARCHAR 本身就是可变长度的
      

  2.   

    如果定义varchar2(10)和varchar2(4000)存储最大10个字节的内容,在数据库存储上区别不大,数据库效率也影响不大,但是会带来其它很多的问题,最影响应用的效率。
    现举两个出问题的例子:
    1.如果你的表中存在多个varchar2(4000)的列,将导致不能创建符合index,创建时报ora-01450错误。
     没有符合index,很多时候势必影响应用效率。
    2.假如你定义了varchar2(4000),那么对于应用代码来说,我必须定义String length为4000的变量来容纳列中的值,因为应用不知道你的列的最大length是10啊,也就是说应用服务器必须额外的分配一些浪费的内存来存储取得的列值;大量的这量代码的存在,消耗了宝贵的内存,必然导致应用效率下降。所以说,用多少字节,定义多少字节的,不要随便用varchar2的极限。
      

  3.   

    符合index 是 复合index,笔误。呵呵
      

  4.   

    符合index 是 复合index,笔误。呵呵
      

  5.   

    定义varchar2(10)不能存储10个以上的字符,
    定义varchar2(4000)最多可存储4000个字符
    建议按实际需求定义,即按最长的字符串长度来定义。
      

  6.   

    oracledbalgtu说得有理,可变长存储虽然是varchar2的优势,但是还是有一些制约因素的。
    不然oracle早就推出不需要设置长度的字符变量类型了。
      

  7.   


    说的对!
    --------
    oracledbalgtu  说的也很有道理!!
    在数据结构的设计上,应该根据实际需求权衡设计。