Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database sql中的限制和偏移量有问题吗?_Database_Postgresql - Fatal编程技术网

Database sql中的限制和偏移量有问题吗?

Database sql中的限制和偏移量有问题吗?,database,postgresql,Database,Postgresql,我有一个按id排序的表,我想检索n行偏移量m行,但是当我在没有orderby的情况下使用它时,它会产生不可预测的结果,而按id排序会花费太多时间,因为我的表已经排序,我只想检索n行,只剩下前m行 SELECT * FROM mytable LIMIT 100 OFFSET 0 但是,您确实不应该依赖隐式排序,因为您可能无法预测数据进入数据库的确切顺序 但是,您确实不应该依赖隐式排序,因为您可能无法预测数据进入数据库的确切顺序。如上所述,除非您有order BY子句,否则SQL不能保证关于顺序的

我有一个按id排序的表,我想检索n行偏移量m行,但是当我在没有orderby的情况下使用它时,它会产生不可预测的结果,而按id排序会花费太多时间,因为我的表已经排序,我只想检索n行,只剩下前m行

SELECT * FROM mytable LIMIT 100 OFFSET 0
但是,您确实不应该依赖隐式排序,因为您可能无法预测数据进入数据库的确切顺序


但是,您确实不应该依赖隐式排序,因为您可能无法预测数据进入数据库的确切顺序。

如上所述,除非您有order BY子句,否则SQL不能保证关于顺序的任何内容。在这种情况下,“限制”仍然很有用,但我想不出补偿有什么用处。听起来好像没有id上的索引,因为如果有,查询速度应该非常快,不管是集群还是非集群。再看看这个。(还要检查群集,这可能会提高您的性能。)


重复:这与Postgresql无关。它在这里的行为是一致的。

如上所述,SQL不保证任何关于订单的内容,除非您有ORDERBY子句。在这种情况下,“限制”仍然很有用,但我想不出补偿有什么用处。听起来好像没有id上的索引,因为如果有,查询速度应该非常快,不管是集群还是非集群。再看看这个。(还要检查群集,这可能会提高您的性能。)

重复:这与Postgresql无关。它在这里的行为是一致的。

上面说:

查询计划器在生成查询计划时会考虑限额,因此根据您对限额和偏移的使用情况,很可能会得到不同的计划(生成不同的行顺序)。因此,使用不同的限制/偏移值来选择查询结果的不同子集将产生不一致的结果,除非您使用ORDER BY强制执行可预测的结果排序。这不是一个错误;这是SQL不承诺以任何特定顺序交付查询结果的固有结果,除非使用ORDERBY约束顺序

所以你所尝试的并不能真正做到

我想你可以使用计划者选项,或者以一种巧妙的方式重新安排查询,以诱使计划者使用适合你的计划,但如果不实际显示查询,很难说。

报告说:

查询计划器在生成查询计划时会考虑限额,因此根据您对限额和偏移的使用情况,很可能会得到不同的计划(生成不同的行顺序)。因此,使用不同的限制/偏移值来选择查询结果的不同子集将产生不一致的结果,除非您使用ORDER BY强制执行可预测的结果排序。这不是一个错误;这是SQL不承诺以任何特定顺序交付查询结果的固有结果,除非使用ORDERBY约束顺序

所以你所尝试的并不能真正做到

我想您可以使用planner选项,或者以一种巧妙的方式重新安排查询,以诱使planner使用适合您的计划,但在不实际显示查询的情况下,很难说。

因为我的表已经排序了。表是一组无序的行。除非指定Order By,否则数据库不能保证行的排序。因此,不存在“我的桌子已经订购”的概念。您不能假设当您查询表时,即使给定相同的查询,它也将以特定的顺序进行查询,除非您使用order By。表是一组无序的行。除非指定Order By,否则数据库不能保证行的排序。因此,不存在“我的桌子已经订购”的概念。除非使用order By,否则不能假设在查询表时,即使给定了相同的查询,表也将按特定顺序进行。