也许有人可以向我解释这一点,但是当从Oracle查询数据表(其中存在多个记录(例如客户ID))时,对于该客户而言首先出现的记录可以变化,如果没有隐含的“order by”语句通过例如交易类型等替代字段来强制执行订单。因此,在同一张表上运行相同的查询可能会产生与10分钟前不同的记录排序。当没有使用“order by”子句时,Oracle SQL以任意方式返回行
例如,一次运行可以产生:
CUST_ID,TRANSACTION_TYPE
123甲
123乙
除非 “由TRANSACTION_TYPE顺序” 子句中使用的,甲骨文可以任意地返回以下结果的下一个时间运行查询:
CUST_ID,TRANSACTION_TYPE
123乙
123甲
我想我的印象是在Oracle中有一个数据库默认的行排序(可能)反映了磁盘介质上的物理顺序。换句话说,一个任意的顺序是不变的,并且在查询重新运行时可以保证得到相同的结果。
这是否与优化器有关,以及它如何决定最有效地检索数据的位置?
当然,从编程的角度来看,最好的做法是强制任何需要的顺序,我只是有点不安这种行为。
我不知道为什么,但这是一个非常有趣的观察,尤其是它的'不安'部分。 :) – 2010-09-21 21:12:56
你不*强迫*订购,你*选择*它。 – egrunin 2010-09-22 13:37:56