heap表按字符串和数值型排序规则

SQL> create user scan identified by scan default tablespace users;

User created.

SQL> grant dba to scan;

Grant succeeded.



create table t1  (id char(10) primary key,a1 char(10),a2 char(10));  


begin 
for i in 1 .. 25
loop 
insert into t1 values(i,i,'a'||i); 
end loop 
; 
commit; 
end; 


BEGIN
  DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'SCAN',
                                tabname          => 'T1',
                                estimate_percent => 100,
                                method_opt       => 'for all columns size repeat',
                                no_invalidate    => FALSE,
                                degree           => 8,
                                cascade          => TRUE);
END;
/ 




create table t2 (id int primary key,a1 char(10),a2 char(10))organization index; 


begin 
for i in 1 .. 25 
loop 
insert into t2 values(i,i,'a'||i); 
end loop 
; 
commit; 
end;


BEGIN
  DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'SCAN',
                                tabname          => 'T2',
                                estimate_percent => 100,
                                method_opt       => 'for all columns size repeat',
                                no_invalidate    => FALSE,
                                degree           => 8,
                                cascade          => TRUE);
END;
/ 



先分别dump下t1和t2表:  t1 heap  t2 iot

SQL> select  TABLE_NAME,TABLESPACE_NAME,CLUSTER_NAME, IOT_NAME from user_tables;

TABLE_NAME		       TABLESPACE_NAME		      CLUSTER_NAME		     IOT_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------
T1			       USERS
T2



SQL>  select object_name,object_id from user_objects;

OBJECT_NAME			OBJECT_ID
------------------------------ ----------
SYS_C00147516			   260450
T2				   260451
T1				   260449
SYS_IOT_TOP_260451		   260452




SQL>  select index_name,INDEX_TYPE,TABLE_OWNER,TABLE_NAME,table_type from user_indexes;

INDEX_NAME		       INDEX_TYPE		   TABLE_OWNER			  TABLE_NAME			 TABLE_TYPE
------------------------------ --------------------------- ------------------------------ ------------------------------ -----------
SYS_C00147516		       NORMAL			   SCAN 			  T1				 TABLE
SYS_IOT_TOP_260451	       IOT - TOP		   SCAN 			  T2				 TABLE



2.将索引dump到trace文件中
SQL> select value from v$diag_info where name='Default Trace File';

VALUE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/ncdb/podinndb/trace/podinndb_ora_28524.trc

SQL> alter session set events 'immediate trace name treedump level 260450';

会话已更改。


----- begin tree dump
leaf: 0x100008b 16777355 (0: nrow: 25 rrow: 25)
----- end tree dump


SQL> select index_name, PREFIX_LENGTH, BLEVEL, LEAF_BLOCKS from user_indexes where index_name='SYS_C00147516';

INDEX_NAME		       PREFIX_LENGTH	 BLEVEL LEAF_BLOCKS
------------------------------ ------------- ---------- -----------
SYS_C00147516					      0 	  1




SQL> select dbms_utility.data_block_address_file('16777355') FILE_ID,
       dbms_utility.data_block_address_block('16777355') BLOCK_ID
  from dual;   2    3  

   FILE_ID   BLOCK_ID
---------- ----------
	 4	  139



SQL>  select header_file,header_block from dba_segments where segment_name='SYS_C00147516';

HEADER_FILE HEADER_BLOCK
----------- ------------
	  4	     138



select dbms_utility.data_block_address_file(16777355)fno,
dbms_utility.data_block_address_block(16777355) bkno from dualSQL>   2  
  3  ;

       FNO	 BKNO
---------- ----------
	 4	  139;  

SQL> alter system dump datafile 4 block 139;




row#0[8013] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 00
col 0; len 10; (10):  31 20 20 20 20 20 20 20 20 20      ---表示1
row#1[7842] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 09
col 0; len 10; (10):  31 30 20 20 20 20 20 20 20 20      ---表示10
row#2[7823] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 0a
col 0; len 10; (10):  31 31 20 20 20 20 20 20 20 20      --表示11
row#3[7804] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 0b
col 0; len 10; (10):  31 32 20 20 20 20 20 20 20 20      --表示12
row#4[7785] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 0c
col 0; len 10; (10):  31 33 20 20 20 20 20 20 20 20       --表示13
row#5[7766] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 0d
col 0; len 10; (10):  31 34 20 20 20 20 20 20 20 20       --表示14
row#6[7747] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 0e
col 0; len 10; (10):  31 35 20 20 20 20 20 20 20 20       --表示15
row#7[7728] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 0f
col 0; len 10; (10):  31 36 20 20 20 20 20 20 20 20       --表示16
row#8[7709] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 10
col 0; len 10; (10):  31 37 20 20 20 20 20 20 20 20       --表示17
row#9[7690] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 11
col 0; len 10; (10):  31 38 20 20 20 20 20 20 20 20       --表示18
row#10[7671] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 12
col 0; len 10; (10):  31 39 20 20 20 20 20 20 20 20        --表示19
row#11[7994] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 01
col 0; len 10; (10):  32 20 20 20 20 20 20 20 20 20         --表示2
row#12[7652] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 13
col 0; len 10; (10):  32 30 20 20 20 20 20 20 20 20          --表示20
row#13[7633] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 14
col 0; len 10; (10):  32 31 20 20 20 20 20 20 20 20           --表示21
row#14[7614] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 15
col 0; len 10; (10):  32 32 20 20 20 20 20 20 20 20          --表示22
row#15[7595] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 16
col 0; len 10; (10):  32 33 20 20 20 20 20 20 20 20         --表示23
row#16[7576] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 17
col 0; len 10; (10):  32 34 20 20 20 20 20 20 20 20         --表示24
row#17[7557] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 18
col 0; len 10; (10):  32 35 20 20 20 20 20 20 20 20         --表示25
row#18[7975] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 02
col 0; len 10; (10):  33 20 20 20 20 20 20 20 20 20         --表示3
row#19[7956] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 03
col 0; len 10; (10):  34 20 20 20 20 20 20 20 20 20           --表示4
row#20[7937] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 04
col 0; len 10; (10):  35 20 20 20 20 20 20 20 20 20            --表示5
row#21[7918] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 05
col 0; len 10; (10):  36 20 20 20 20 20 20 20 20 20           --表示6
row#22[7899] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 06
col 0; len 10; (10):  37 20 20 20 20 20 20 20 20 20           --表示7
row#23[7880] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 07
col 0; len 10; (10):  38 20 20 20 20 20 20 20 20 20           --表示8
row#24[7861] flag: ------, lock: 2, len=19, data:(6):  01 00 00 85 00 08
col 0; len 10; (10):  39 20 20 20 20 20 20 20 20 20           --表示9
----- end of leaf block dump -----
End dump data blocks tsn: 4 file#: 4 minblk 139 maxblk 139


DECLARE
   n   VARCHAR2 (2000);
BEGIN
   DBMS_STATS.convert_raw_value ('35', n);
   DBMS_OUTPUT.put_line (n);
   DBMS_STATS.convert_raw_value ('20', n);
   DBMS_OUTPUT.put_line (n);
   DBMS_STATS.convert_raw_value ('20', n);
   DBMS_OUTPUT.put_line (n);
   DBMS_STATS.convert_raw_value ('20', n);
   DBMS_OUTPUT.put_line (n);
   DBMS_STATS.convert_raw_value ('20', n);
   DBMS_OUTPUT.put_line (n);
   DBMS_STATS.convert_raw_value ('20', n);
   DBMS_OUTPUT.put_line (n);
   DBMS_STATS.convert_raw_value ('20', n);
   DBMS_OUTPUT.put_line (n);
   DBMS_STATS.convert_raw_value ('20', n);
   DBMS_OUTPUT.put_line (n);
   DBMS_STATS.convert_raw_value ('20', n);
   DBMS_OUTPUT.put_line (n);
   DBMS_STATS.convert_raw_value ('20', n);
   DBMS_OUTPUT.put_line (n);
END;


结论 heap表主键只有对应的列

heap 表排序:
SQL> select * from t1 order by t1.id;

ID	   A1	      A2
---------- ---------- ----------
1	   1	      a1
10	   10	      a10
11	   11	      a11
12	   12	      a12
13	   13	      a13
14	   14	      a14
15	   15	      a15
16	   16	      a16
17	   17	      a17
18	   18	      a18
19	   19	      a19

ID	   A1	      A2
---------- ---------- ----------
2	   2	      a2
20	   20	      a20
21	   21	      a21
22	   22	      a22
23	   23	      a23
24	   24	      a24
25	   25	      a25
3	   3	      a3
4	   4	      a4
5	   5	      a5
6	   6	      a6

ID	   A1	      A2
---------- ---------- ----------
7	   7	      a7
8	   8	      a8
9	   9	      a9

25 rows selected.


t1表 id列为字符串,排序是按字符串排序




/***创建t3表改为数值型/

create table t3  (id int primary key,a1 char(10),a2 char(10));  


begin 
for i in 1 .. 25
loop 
insert into t3 values(i,i,'a'||i); 
end loop 
; 
commit; 
end; 

BEGIN
  DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'SCAN',
                                tabname          => 'T3',
                                estimate_percent => 100,
                                method_opt       => 'for all columns size repeat',
                                no_invalidate    => FALSE,
                                degree           => 8,
                                cascade          => TRUE);
END;
/ 



SQL>  select  TABLE_NAME,TABLESPACE_NAME,CLUSTER_NAME, IOT_NAME from user_tables;

TABLE_NAME	     TABLESPACE_NAME		    CLUSTER_NAME		   IOT_NAME
-------------------- ------------------------------ ------------------------------ ------------------------------
T1		     USERS
T3		     USERS
T2


SQL> select object_name,object_id from user_objects;

OBJECT_NAME			OBJECT_ID
------------------------------ ----------
SYS_C00147518			   260454
T3				   260453
SYS_IOT_TOP_260451		   260452
T1				   260449
T2				   260451
SYS_C00147516			   260450

6 rows selected.



SQL>  select index_name,INDEX_TYPE,TABLE_OWNER,TABLE_NAME,table_type from user_indexes;

INDEX_NAME		       INDEX_TYPE		   TABLE_OWNER			  TABLE_NAME	       TABLE_TYPE
------------------------------ --------------------------- ------------------------------ -------------------- -----------
SYS_C00147516		       NORMAL			   SCAN 			  T1		       TABLE
SYS_IOT_TOP_260451	       IOT - TOP		   SCAN 			  T2		       TABLE
SYS_C00147518		       NORMAL			   SCAN 			  T3		       TABLE



2.将索引dump到trace文件中
SQL> select value from v$diag_info where name='Default Trace File';

VALUE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/ncdb/podinndb/trace/podinndb_ora_29363.trc

SQL> alter session set events 'immediate trace name treedump level 260454';

会话已更改。


----- begin tree dump
leaf: 0x10000a3 16777379 (0: nrow: 25 rrow: 25)
----- end tree dump

SQL> select index_name, PREFIX_LENGTH, BLEVEL, LEAF_BLOCKS from user_indexes where index_name='SYS_C00147518';

INDEX_NAME		       PREFIX_LENGTH	 BLEVEL LEAF_BLOCKS
------------------------------ ------------- ---------- -----------
SYS_C00147518					      0 	  1




SQL> select dbms_utility.data_block_address_file('16777379') FILE_ID,
       dbms_utility.data_block_address_block('16777379') BLOCK_ID
  from dual;   2    3  

   FILE_ID   BLOCK_ID
---------- ----------
	 4	  163


SQL>  select header_file,header_block from dba_segments where segment_name='SYS_C00147518';

HEADER_FILE HEADER_BLOCK
----------- ------------
	  4	     162

SQL> select dbms_utility.data_block_address_file(16777379)fno,
dbms_utility.data_block_address_block(16777379) bkno from dual  2  ;

       FNO	 BKNO
---------- ----------
	 4	  163

SQL> alter system dump datafile 4 block 163;



row#0[8021] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 00
col 0; len 2; (2):  c1 02   ---表示1
row#1[8010] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 01
col 0; len 2; (2):  c1 03   --表示2
row#2[7999] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 02
col 0; len 2; (2):  c1 04   --表示3
row#3[7988] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 03
col 0; len 2; (2):  c1 05   --表示4
row#4[7977] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 04
col 0; len 2; (2):  c1 06   --表示5
row#5[7966] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 05
col 0; len 2; (2):  c1 07
row#6[7955] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 06
col 0; len 2; (2):  c1 08
row#7[7944] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 07
col 0; len 2; (2):  c1 09
row#8[7933] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 08
col 0; len 2; (2):  c1 0a
row#9[7922] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 09
col 0; len 2; (2):  c1 0b
row#10[7911] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 0a
col 0; len 2; (2):  c1 0c
row#11[7900] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 0b
col 0; len 2; (2):  c1 0d
row#12[7889] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 0c
col 0; len 2; (2):  c1 0e
row#13[7878] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 0d
col 0; len 2; (2):  c1 0f
row#14[7867] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 0e
col 0; len 2; (2):  c1 10
row#15[7856] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 0f
col 0; len 2; (2):  c1 11
row#16[7845] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 10
col 0; len 2; (2):  c1 12
row#17[7834] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 11
col 0; len 2; (2):  c1 13
row#18[7823] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 12
col 0; len 2; (2):  c1 14
row#19[7812] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 13
col 0; len 2; (2):  c1 15
row#20[7801] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 14
col 0; len 2; (2):  c1 16
row#21[7790] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 15
col 0; len 2; (2):  c1 17
row#22[7779] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 16
col 0; len 2; (2):  c1 18  --表示23
row#23[7768] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 17
col 0; len 2; (2):  c1 19    --表示24
row#24[7757] flag: ------, lock: 2, len=11, data:(6):  01 00 00 9d 00 18
col 0; len 2; (2):  c1 1a    --表示25
----- end of leaf block dump -----
End dump data blocks tsn: 4 file#: 4 minblk 163 maxblk 163



declare    
   n number;    
 begin    
   dbms_stats.convert_raw_value('c102',    
                                n);    
   dbms_output.put_line(n);    
 end; 

SQL> select * from t3 order by t3.id;

	ID A1	      A2
---------- ---------- ----------
	 1 1	      a1
	 2 2	      a2
	 3 3	      a3
	 4 4	      a4
	 5 5	      a5
	 6 6	      a6
	 7 7	      a7
	 8 8	      a8
	 9 9	      a9
	10 10	      a10
	11 11	      a11

	ID A1	      A2
---------- ---------- ----------
	12 12	      a12
	13 13	      a13
	14 14	      a14
	15 15	      a15
	16 16	      a16
	17 17	      a17
	18 18	      a18
	19 19	      a19
	20 20	      a20
	21 21	      a21
	22 22	      a22

	ID A1	      A2
---------- ---------- ----------
	23 23	      a23
	24 24	      a24
	25 25	      a25

25 rows selected.



结论 字符串和数值型 排序方式不同

posted @ 2016-11-08 09:23  czcb  阅读(144)  评论(0编辑  收藏  举报