參考:http://www.cnblogs.com/vipcjob/archive/2010/06/08/1754075.htmlhtml
http://www.itpub.net/thread-732714-2-1.html數據庫
既然varchar2是變長的,那麼設置它的長度還有什麼意義?乾脆都用最大長度
好比說一個Currency字段,我能夠把它設爲varchar2(3),我也能夠設爲最大長度varchar2(4000),請問一下設爲長度3有什麼好處?
惟一能夠想到的是,前一種方式限制了能夠輸入的值的範圍,可是也留下了隱患:萬一之後長度變大了怎麼辦?fetch
主要如下3個好處.net
1。因爲數據庫的限制(參見Logical Database Limits),每一個索引的字段的總長度不能超過75% * the database block size再減去some overhead的長度,因爲有限制,因此字段的長度也限制了索引字段的大小:htm
SQL> create table x(
a varchar2(2000),
b varchar2(2000),
c varchar2(2000),
d varchar2(2000),
e varchar2(2000));blog
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);
索引已建立。ip
SQL> create index x_idx on x(a,b,c,d);
第 1 行出現錯誤:
ORA-01450: 超出最大的關鍵字長度 (6398)內存
二、 字段長度可以起到必定的限制做用,好比一個字段長度要求是10個字節,必需要設置爲varchar2(10)。it
三、 若是用到ARRAY FETCH,那麼客戶端fetch 數據須要的內存是根據定義的字段的長度,因此大的字段會須要大的內存。好比10個VARCHAR2(4000)字段,我要取100行,那麼就須要4000*10*100的內存,大約是4M,可是若是定義爲VARCHAR2(10),那麼就須要10*10*100的內存。