Oracle查询返回同一组数据的不同结果

aki*_*ila 1 oracle

我面临着一个奇怪的问题,即同一个查询返回不同的结果.

我的查询是:

SELECT * FROM TX_HISTORY  WHERE acct = 7  AND ROWNUM 

发生的事情是,我知道对于这个帐户,tx_history中有超过100条记录.我想根据处理日期获得前100条记录.我的这个帐户的数据是我有2004年至2011年的记录

问题是有时它正确地显示从2004年开始的100条记录 - 但有时它会显示我从2005年开始的100条记录

我读到这可以通过以下方式解决:

SELECT * FROM (select * from TX_HISTORY  WHERE acct = 7  ORDER BY acct,processing_date)
where rownum 

所以在我之前的查询中是:1>我的理解是在rownum <= 100之后应用order by并且oracle返回的结果是随机顺序,其中行num是过滤的

虽然不明白为什么结果会有所不同谢谢,〜akila

Thi*_*ilo 8

如果您没有指定任何排序(在这种情况下,正如您已经发现的那样,您没有订购要检索的数据,您只能在之后进行排序),则由数据库按照它认为合适的任何顺序返回它们.

例如,它可以按照它们存储的顺序开始读取行,这些行随着数据的更新而变化.它也不必从表的顶部开始,它可以从缓冲区缓存中已有的块开始.

由于您没有指定订单,因此DB会选择(它认为是什么)在这个特定时刻可用的最便宜的方式.