2015-04-23 57 views
3

全部,假設SQL如下所示。如果訂單字段的值與所有記錄相同,該怎麼辦?

Select a, b ,c from table1 order by c 

如果table1中的所有行在字段c中具有相同的字段值,我想知道每次執行SQL時結果是否具有相同的順序。

假設table1中的數據如下所示。

a    b     c 
------------------------------------------- 
1    x1     2014-4-1 
.... 
100   x100    2014-4-1 
.... 
1000   x1000    2014-4-1 
.... 

Oracle如何根據值確定相同順序的行順序?

新增

他們將是隨機的序列中每個時間?

回答

4

一個簡單的答案是。有不能保證ORDER BY相等的值將每次返回相同的排序結果。在你看來,它總是穩定的,然而,它可以改變的原因有很多。

例如,在相等的值排序可能會推遲後:

  1. 收集統計
  2. 在列

例如添加一個索引,

比方說,我有表t:

SQL> SELECT * FROM t ORDER BY b; 

     A   B 
---------- ---------- 
     1   1 
     2   1 
     3   2 
     4   2 
     5   3 
     6   3 

6 rows selected. 

上具有相似值的列的排序僅僅是這樣的:

SQL> CREATE TABLE t1 AS SELECT * FROM t ORDER BY b, DBMS_RANDOM.VALUE; 

Table created. 

SQL> SELECT * FROM t1 ORDER BY b; 

     A   B 
---------- ---------- 
     1   1 
     2   1 
     4   2 
     3   2 
     5   3 
     6   3 

6 rows selected. 

所以,在機器人類似的數據表,但是,ORDER BY上具有相等的值的列,DOS不能保證相同的排序。

+0

對不起,這是什麼意思'收集統計信息「 –

+0

@ Joe.wang統計信息是Optimizer選擇最佳執行計劃所需的。請參閱http://docs.oracle.com/cd/B19306_01/server.102/b14211/stats.htm#g49431 –

+0

謝謝,現在理解它更好。這個問題真的很難找到。謝謝你的幫助。 –

0

它們不能隨機(每次更改),但順序不保證(有時會更改)。

相關問題