数据库表设计之number注意事项

在数据库设计表时,注意字段的类型的选择,先后顺序,这些都是影响性能的,如果设计不对,无论你使用parallel,nologing,compress ,order by index 都没有明显性能提升! 

小续:

number和number(1),number(23) 在user_tab_col中data_length 都是22,没有区别,为什么呢?

SQL> desc ml_test;
Name Type       Nullable Default Comments 
---- ---------- -------- ------- -------- 
A    INTEGER    Y                         
B    NUMBER(1)  Y                         
C    NUMBER(23) Y                         
 
SQL> select TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH from user_tab_columns WHERE TABLE_name=upper('ml_test'); 
 
TABLE_NAME        COLUMN_NAME      DATA_TYPE           DATA_LENGTH
------------ -------------- ------------------------ -----------
ML_TEST             A              NUMBER                 22
ML_TEST             B              NUMBER                 22
ML_TEST             C              NUMBER                 22
 


解释如下:

1.DATA_LENGTH          NUMBER                   Length of the column in bytes/*列的数据类型的字节长度*/                                           
2.DATA_PRECISION       NUMBER                   Length: decimal digits (NUMBER) or binary digits (FLOAT)/*数字类型的实际长度*/                
3.DATA_SCALE           NUMBER                   Digits to right of decimal point in a number/*小数点位数*/  


 

看看存储的对比:

SQL> select dump(110) from dual
  2   union all
  3   select dump(1100) from dual
  4   union all
  5   select dump('') from dual union all
  6   select dump(null) from dual
  7   union all
  8   select dump(' ') from dual
  9  ;
 
DUMP(110)
---------------------
Typ=2 Len=3: 194,2,11
Typ=2 Len=2: 194,12
NULL
NULL
Typ=96 Len=1: 32

 

分析: 为什么1100>110 ,但存储时110有3个len,而1100只有2个len。

 

下面是百度wenku的详细解释,详细介绍dump

http://wenku.baidu.com/view/62e707a2b0717fd5360cdc19.html

 

 

总结:

1.设计表时,能用number(1), 就尽力不用number,能用number的,就尽力不用varchar2,char

2.空字段,尽力放后面,以免给中间造成补空存储的浪费,导致物理读增加。

3.有必须按照排序入库,或者建立有序的索引。





SQL> select dump(123456.789) from dual; 

 
DUMP(123456.789) 
  
------------------------------- 

 
Typ=2 Len=6: 195,13,35,57,79,91 

 
  
指数:   195 - 193 = 2   

数字1    13 - 1    = 12 *100^(2-0) 120000  

数字2    35 - 1    = 34 *100^(2-1) 3400  

数字3    57 - 1    = 56 *100^(2-2) 56  

数字4    79 - 1    = 78 *100^(2-3) .78  

数字5    91 - 1    = 90 *100^(2-4) .009  

                            123456.789 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值