在数据库设计表时,注意字段的类型的选择,先后顺序,这些都是影响性能的,如果设计不对,无论你使用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