打开dump出来的trace文件,限于篇幅只截取部分,可以清晰的看到虽然表是按照OBJECT_NAME的依次插入记录的,但是索引条目依然按照OBJECT_ID的顺序存储在块中。 row#0[8019] flag: ------, lock: 0, len=13 col 0; len 3; (3): c2 15 58 col 1; len 6; (6): 01 00 2f bb 00 19 row#1[8006] flag: ------, lock: 0, len=13 col 0; len 3; (3): c2 15 59 col 1; len 6; (6): 01 00 2f c2 00 43 row#2[7993] flag: ------, lock: 0, len=13 col 0; len 3; (3): c2 15 5a col 1; len 6; (6): 01 00 2f bb 00 17 row#3[7980] flag: ------, lock: 0, len=13 col 0; len 3; (3): c2 15 5b col 1; len 6; (6): 01 00 2f c2 00 47 row#4[7967] flag: ------, lock: 0, len=13 col 0; len 3; (3): c2 15 5c col 1; len 6; (6): 01 00 2f bb 00 1b row#5[7954] flag: ------, lock: 0, len=13 col 0; len 3; (3): c2 15 5d col 1; len 6; (6): 01 00 2f c2 00 49
... 那么我们看看再次插入OBJECT_ID=2088的记录效果怎么样?
点击(此处)折叠或打开
SQL> insert intotest select * from dba_objects where object_id=2088;
1 row created.
SQL> commit;
Commit complete.
SQL> alter system dump datafile 4 block 12280;
System altered.
row#0[8019] flag: ------, lock: 0, len=13 col 0; len 3; (3): c2 15 58 col 1; len 6; (6): 01 00 2f bb 00 19 row#1[8006] flag: ------, lock: 0, len=13 col 0; len 3; (3): c2 15 59 col 1; len 6; (6): 01 00 2f c2 00 43 row#2[1797] flag: ------, lock: 2, len=13 col 0; len 3; (3): c2 15 59 col 1; len 6; (6): 01 00 30 6b 00 00 row#3[7993] flag: ------, lock: 0, len=13 col 0; len 3; (3): c2 15 5a col 1; len 6; (6): 01 00 2f bb 00 17 row#4[7980] flag: ------, lock: 0, len=13 col 0; len 3; (3): c2 15 5b col 1; len 6; (6): 01 00 2f c2 00 47 row#5[7967] flag: ------, lock: 0, len=13 col 0; len 3; (3): c2 15 5c col 1; len 6; (6): 01 00 2f bb 00 1b
发现了什么?索引中新增了一键值为c2 15 59(2088)的索引条目。无论记录在表中是怎么杂乱无章存储的还是按照有序的,一旦创建索引后,索引条目都是按照索引列为顺序来进行存储的,这里就引出了聚簇因子概念,具体聚簇因子的概念在这里不再赘述。另外执行计划中INDEX FULL SCAN也是基于索引键值有序这个原理。