小编jgu*_*ink的帖子

当没有使用"order by"子句时,Oracle SQL以任意方式返回行

也许有人可以向我解释这一点,但是当从Oracle查询数据表时,如果存在密钥的多个记录(比如客户ID),那么如果没有隐含的"order by",那么该客户首先出现的记录可能会有所不同.声明通过说替代字段(例如事务类型)来强制执行订单.因此,在同一个表上运行相同的查询可能会产生与10分钟前不同的记录顺序.

例如,一次运行可以产生:

Cust_ID,Transaction_Type
123 A
123 B.

除非使用"Transaction by Transaction_Type"子句,否则Oracle可以在下次运行查询时随意返回以下结果:

Cust_ID,Transaction_Type
123 B
123 A.

我想我的印象是Oracle中有一个数据库默认的行排序(可能)反映了磁盘介质上的物理排序.换句话说,任意顺序是不可变的,并且在重新运行查询时将保证相同的结果.

这是否与优化器有关,以及它如何决定最有效地检索数据的位置?

当然,编程视角下的最佳实践是强制要求任何顺序,我对这种行为感到有点不安.

sql oracle rows sql-order-by

8
推荐指数
5
解决办法
9102
查看次数

标签 统计

oracle ×1

rows ×1

sql ×1

sql-order-by ×1