PLSQL 查询的默认排序分析
ORACLE对无order by的语句返回的结果不进行排序,ORACLE此时的处理方式是按照数据的物理存储顺序来读取数据。因为rowid是每行数据的地址,所以有时候看起来会像是使用rowid排序的。
但这个顺序是可能被打乱的,在表的数据被删除后,rowid会被新插入的数据占用,所以一个无order by查询结果看起来也可能是个杂乱无章的。
测试:
--建立测试用表
create table order_test( seq varchar2(2) );
--插入数据并查询
insert into order_test values('A');
insert into order_test values('B');
insert into order_test values('C');
select seq from order_test;
查询结果如下
A,
B,
C
删除B,并插入D
delete from order_test where seq = 'B';
insert into order_test values('D');
select seq from order_test;
查询结果按rowid排序(删除B后,rowid可被新插入的行使用)
A,
D,
C
而不是按插入顺序排序
A,
C,
D

浙公网安备 33010602011771号