时间:2016-05-17 12:53:50

标签: sql postgresql select sql-order-by

我的理解是,不能保证选择总是返回相同的结果。

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

select * from myTable offset 10000 limit 100

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

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

我正在使用postgresql。

1 个答案:

答案 0 :(得分:3)

表和结果集(没有order by)根本没有订购。真的很简单。

在某些数据库中,在某些情况下,订单将保持一致。但是,你应该从不依赖于此。例如,后续版本可能会使查询无效。

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

考虑它的另一种方法是考虑已经在内存中有页面的页面缓存 - 可能来自表的末尾。 SQL引擎可以按任何顺序读取页面(虽然实际上并没有真正发生这种情况)。

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

所以,接受无序意味着有序意味着什么。如果您想要特定订单中的数据,请添加order by。如果使用聚簇索引键,则基本上没有性能损失。

相关问题