- 论坛徽章:
- 0
|
在上一篇关于ora-1652的一点总结中,有部分内容并未给出一个最终的结论,详见如下连接: http://www.killdb.com/2011/09/30 ... 80%bb%e7%bb%93.html 在本文中,对上篇文章中的疑问进行的详细的实验说明和解释,实验过程如下:
SQL> conn roger/roger
Connected.
SQL> create table ht1 as select * from sys.dba_objects where rownum <1000; Table created. SQL> create index idx_ht1 on ht1(object_id) tablespace roger; Index created.
SQL> select dump(object_id) from ht1 where object_id <20 order by object_id; DUMP(OBJECT_ID)
--------------------------
Typ=2 Len=2: 193,3
Typ=2 Len=2: 193,4
Typ=2 Len=2: 193,5
Typ=2 Len=2: 193,6
Typ=2 Len=2: 193,7
Typ=2 Len=2: 193,8
Typ=2 Len=2: 193,9
Typ=2 Len=2: 193,10
Typ=2 Len=2: 193,11
Typ=2 Len=2: 193,12
Typ=2 Len=2: 193,13 DUMP(OBJECT_ID)
--------------------------
Typ=2 Len=2: 193,14
Typ=2 Len=2: 193,15
Typ=2 Len=2: 193,16
Typ=2 Len=2: 193,17
Typ=2 Len=2: 193,18
Typ=2 Len=2: 193,19
Typ=2 Len=2: 193,20 18 rows selected.
SQL> select dump(object_id)
2 from ht1
3 where object_id > 500
4 and object_id < 510
5 order by object_id; DUMP(OBJECT_ID)
----------------------------------------
Typ=2 Len=3: 194,6,2
Typ=2 Len=3: 194,6,3
Typ=2 Len=3: 194,6,4
Typ=2 Len=3: 194,6,5
Typ=2 Len=3: 194,6,6
Typ=2 Len=3: 194,6,7
Typ=2 Len=3: 194,6,8
Typ=2 Len=3: 194,6,9
Typ=2 Len=3: 194,6,10 9 rows selected. SQL>
我们可以发现,该字段object_id有些是2个字节,有些是3个字节,那么我们应该以2还是3为准呢?
我想应该以该列的平均长度为准,通过分析该表,得到该列的平均长度。
SQL> analyze table ht1 compute statistics for table for all indexes for all columns; Table analyzed.
SQL> select table_name,COLUMN_NAME,DATA_LENGTH,AVG_COL_LEN,CHAR_LENGTH,CHAR_USED from user_tab_columns
2 where table_name='HT1'; TABLE_NAME COLUMN_NAME DATA_LENGTH AVG_COL_LEN CHAR_LENGTH C
------------- ----------------- ----------- ----------- ----------- -
HT1 OWNER 30 4 30 B
HT1 OBJECT_NAME 128 14 128 B
HT1 SUBOBJECT_NAME 30 1 30 B
HT1 OBJECT_ID 22 3 0
HT1 DATA_OBJECT_ID 22 3 0
HT1 OBJECT_TYPE 19 6 19 B
HT1 CREATED 7 7 0
HT1 LAST_DDL_TIME 7 7 0
HT1 TIMESTAMP 19 19 19 B
HT1 STATUS 7 5 7 B
HT1 TEMPORARY 1 1 1 B
TABLE_NAME COLUMN_NAME DATA_LENGTH AVG_COL_LEN CHAR_LENGTH C
------------- ----------------- ----------- ----------- ----------- -
HT1 GENERATED 1 1 1 B
HT1 SECONDARY 1 1 1 B
13 rows selected. SQL> ---从这里得到object_id平均列长度为3. 下面我们再来看rowid是占据多数个字节。
全文请看原文博客链接,如下地址:
http://www.killdb.com/2011/10/02 ... x-entry-header.html |
|