也許有人可以向我解釋這一點,但是當從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