根据我们的试验,假设现在表中有三条记录假设文件号相同,按块号,行号排列如下:
108 0
108 1
108 2
删除中间一条记录后,得到
108 0
108 2
再增加一条记录,可能会得到
108 0
108 1 <---新增加的记录
108 2
也可能是
108 0
108 2
108 3 <---新增加的记录
两种情况均有可能出现,取决于oracle块内的分配算法。关于该情况的更深入的分析可以参见文献2。
2.后插入的记录的块号有可能大,有可能小
插入记录的块号并不是线性增加的,而是受freelist控制。有关freelist的理论和算法可以参见文献1。
因此对于全表扫描可以得出以下结论:
1. 在oracle中 select * from mytable不能保证返回的记录顺序是按插入的先后顺序,而是按rowid顺序。