"选择"总是按主键排序吗?

Thi*_*Roy 17 sql database oracle primary-key

对于所有DBA来说,这是一个基本的简单问题.

当我选择时,是否始终保证我的结果将由主键排序,或者我应该用'order by'指定它?

我正在使用Oracle作为我的数据库.

Bob*_*toe 44

不,如果您不使用"order by",则无法保证任何订购.实际上,您无法保证从一个查询到下一个查询的排序将是相同的.请记住,SQL以基于集合的方式处理数据.现在,一个或多个数据库实现可能会以某种方式提供排序,但您永远不应该依赖它.

  • "任何机会?" 是的,介于0到100%之间,范围足够大,你不应该依赖它.使用标准的SQL语法和行为尽可能的,它简化之间和/或极大地支持多个DBMS供应商(我不是说没有优化特定的厂商,只是发疯它移动的任务 - 使用一些常识,不管它看起来多么罕见:-). (4认同)

Qua*_*noi 6

当我选择时,是否始终保证我的结果将由主键排序,或者我应该用'order by'指定它?

不,到目前为止还没有保证.

SELECT  *
FROM    table
Run Code Online (Sandbox Code Playgroud)

最可能使用的TABLE SCAN根本不使用主键.

您可以使用提示:

SELECT  /*+ INDEX(pk_index_name) */
        *
FROM    table
Run Code Online (Sandbox Code Playgroud)

,但即使在这种情况下,也不保证排序:如果使用Enterprise Edition,查询可以并行化.

这是一个问题,因为ORDER BY不能在SELECT子句子查询中使用,你不能写这样的东西:

SELECT  (
        SELECT  column
        FROM    table
        WHERE   rownum = 1
        ORDER BY
                other_column
        )
FROM    other_table
Run Code Online (Sandbox Code Playgroud)