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。
表和结果集(没有order by)根本没有排序。确实就是这么简单。
在某些数据库中,在某些情况下,顺序会是一致的。但是,您永远不应该依赖于此。例如,后续版本可能会使查询无效。
对我来说,我认为理解这一点的最简单方法是考虑并行处理。当你执行一个查询时,不同的线程可能会出去并开始获取数据;首先返回哪些值取决于不可重现的因素。
另一种思考方式是考虑内存中已经有页面的页面缓存——可能来自表的末尾。SQL 引擎可以按任何顺序读取页面(尽管实际上这并没有真正发生)。
或者,某些其他查询可能具有行锁或页锁,因此在读取记录时会跳过该页。
所以,只要接受无序就意味着有序。order by如果您想要按特定顺序排列数据,请添加。如果使用聚集索引键,那么基本上不会对性能造成影响。
| 归档时间: |
|
| 查看次数: |
4955 次 |
| 最近记录: |