如果订单字段的值对于所有记录都相同怎么办

Joe*_*ang 5 oracle sql-order-by

全部,假设 SQL 如下所示。

Select a, b ,c from table1 order by c
Run Code Online (Sandbox Code Playgroud)

如果所有行在table1字段 c中具有相同的字段值。我想知道每次执行 SQL 时结果的顺序是否相同。

假设数据table1如下所示。

a              b                 c 
-------------------------------------------
1              x1                 2014-4-1
....
100            x100               2014-4-1 
....
1000           x1000              2014-4-1
....
Run Code Online (Sandbox Code Playgroud)

Oracle 如何按值确定相同顺序的行顺序?

添加

它们每次都是随机序列吗?

Lal*_*r B 7

一个简单的答案是否定的。有没有保证的是,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.
Run Code Online (Sandbox Code Playgroud)

对具有相似值的列进行排序就像:

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.
Run Code Online (Sandbox Code Playgroud)

因此,bot 表中的相似数据,但是,ORDER BY在具有相等值的列上,并不能保证相同的排序。