一位程序员正在测试和比较使用相同数据库结构和相同数据的同一应用程序,仅在两个单独的数据库中进行比较,一个数据库使用Oracle 8,一个数据库使用Oracle 9。
该应用程序运行不带 ORDER BY
子句的查询。
他声称,ORDER-BY-less查询应在两个数据库中以相同顺序返回行。
我告诉他,除非您明确提供ORDER BY子句,否则不能保证同一行顺序。
该数据库具有相同的索引和键。但是解释计划表明,在其中一个数据库中,引擎使用的是连接表之一的键,而在另一个数据库中,引擎使用的是另一个表的键。
他暗示这两个数据库环境不相等,这是因为它们具有不同的统计信息,不同的rdbms引擎等,但不是因为我未能复制原始数据库具有的每个索引。
我告诉他,ORDER BY
如果命令真的那么重要,他必须明确提供一个条款。
问题
所以我可以更好地向他解释:
当您不显式提供ORDER BY子句时,查询以什么顺序获取行,为什么该查询不按相同顺序返回行?