• varchar2的长度的意义


    既然varchar2是变长的,那么设置它的长度还有什么意义?干脆都用最大长度
    比如说一个Currency字段,我可以把它设为varchar2(3),我也可以设为最大长度varchar2(4000),请问一下设为长度3有什么好处?
    唯一可以想到的是,前一种方式限制了可以输入的值的范围,但是也留下了隐患:万一以后长度变大了怎么办?

    主要以下3个好处

    1。由于数据库的限制(参见Logical Database Limits),每个索引的字段的总长度不能超过75% * the database block size再减去some overhead的长度,由于有限制,所以字段的长度也限制了索引字段的大小:

    SQL> create table x(
    a varchar2(2000),
    b varchar2(2000),
    c varchar2(2000),
    d varchar2(2000),
    e varchar2(2000));

    SQL>   create table y(
    a varchar2(10),
    b varchar2(10),
    c varchar2(10),
    d varchar2(10),
    e varchar2(10));

    SQL> create index y_idx on y(a,b,c,d);
    索引已创建。

    SQL> create index x_idx on x(a,b,c,d);
    第 1 行出现错误:
    ORA-01450: 超出最大的关键字长度 (6398)

     

    2、   字段长度能够起到一定的限制作用,比如一个字段长度要求是10个字节,必须要设置为varchar2(10)。

    3、   如果用到ARRAY FETCH,那么客户端fetch 数据需要的内存是根据定义的字段的长度,所以大的字段会需要大的内存。比如10个VARCHAR2(4000)字段,我要取100行,那么就需要4000*10*100的内存,大约是4M,但是如果定义为VARCHAR2(10),那么就需要10*10*100的内存。

  • 相关阅读:
    Linux常用命令琐记
    JDK 在linux下支持epoll了
    八卦
    JDK 1.6中的并发
    关于Atomic
    关于并发程序设计(二)
    关于并发程序设计 (一)
    Herb Sutter的一些观点
    想到Exchanger N parties的一种用法
    该拒绝MSN Messager了
  • 原文地址:https://www.cnblogs.com/vipcjob/p/1754075.html
Copyright © 2020-2023  润新知