也许有人可以向我解释这一点,但是当从Oracle查询数据表时,如果存在密钥的多个记录(比如客户ID),那么如果没有隐含的"order by",那么该客户首先出现的记录可能会有所不同.声明通过说替代字段(例如事务类型)来强制执行订单.因此,在同一个表上运行相同的查询可能会产生与10分钟前不同的记录顺序.
例如,一次运行可以产生:
Cust_ID,Transaction_Type
123 A
123 B.
除非使用"Transaction by Transaction_Type"子句,否则Oracle可以在下次运行查询时随意返回以下结果:
Cust_ID,Transaction_Type
123 B
123 A.
我想我的印象是Oracle中有一个数据库默认的行排序(可能)反映了磁盘介质上的物理排序.换句话说,任意顺序是不可变的,并且在重新运行查询时将保证相同的结果.
这是否与优化器有关,以及它如何决定最有效地检索数据的位置?
当然,编程视角下的最佳实践是强制要求任何顺序,我对这种行为感到有点不安.