选择无顺序

Dus*_*czh 7 sql postgresql select sql-order-by

据我了解, select 不能保证始终返回相同的结果。

以下查询不保证每次都返回相同的结果:

select * from myTable offset 10000 limit 100
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果 myTable 在 select 执行之间没有更改(没有删除或插入),我可以依赖它每次返回相同的结果集吗?

或者换句话说,如果我的数据库被锁定以进行更改,我可以依赖 select 返回相同的结果吗?

我正在使用 postgresql。

Gor*_*off 8

表和结果集(没有order by)根本没有排序。确实就是这么简单。

在某些数据库中,在某些情况下,顺序会是一致的。但是,您永远不应该依赖于此。例如,后续版本可能会使查询无效。

对我来说,我认为理解这一点的最简单方法是考虑并行处理。当你执行一个查询时,不同的线程可能会出去并开始获取数据;首先返回哪些值取决于不可重现的因素。

另一种思考方式是考虑内存中已经有页面的页面缓存——可能来自表的末尾。SQL 引擎可以按任何顺序读取页面(尽管实际上这并没有真正发生)。

或者,某些其他查询可能具有行锁或页锁,因此在读取记录时会跳过该页。

所以,只要接受无序就意味着有序。order by如果您想要按特定顺序排列数据,请添加。如果使用聚集索引键,那么基本上不会对性能造成影响。