应用程序可在测试服务器和生产服务器上运行,两者都与Oracle 11g DB集成在一起。

我注意到在表中存储数据时测试服务器上有一些排序:

SELECT * FROM table1:
    |ID-PK| FK1 |name|
    | 100 | 50  | a1 |
    | 101 | 50  | a2 |
    | 102 | 50  | a3 |

当我在另一个数据库服务器上对同一表执行相同的查询时,我得到了一些无序的结果:
SELECT * FROM table1:
    |ID-PK| FK1 |name|
    | 102 | 50  | a3 |
    | 100 | 50  | a1 |
    | 101 | 50  | a2 |

如何强制第二个数据库存储按PK排序的数据?

插入的实体是由Java Web应用程序(使用JPA)创建的,PK是按递增顺序生成的,因此稍后创建的实体应显示在表的末尾。

最佳答案

表中的数据未按顺序存储。在不向查询中添加ORDER BY的情况下,数据库将以最快的方式从表/表中读取行,从而可以从磁盘/存储中读取行,这不能保证它们按排序顺序返回。

第一台服务器上的查询返回的数据可能已经在缓冲区高速缓存中,而先前运行的查询返回的数据具有ORDER BY

当您发出缺少ORDER BY的查询时,引擎决定从缓冲区高速缓存中提取数据,而不是返回到磁盘,这就是为什么它们“按顺序”显示的原因。

关于sql - 将按主键数据排序的存储存储在Oracle DB中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40045672/

10-16 21:38
查看更多