Sql server 分页是否需要按键排序
我了解到,在执行Sql server 分页是否需要按键排序,sql-server,tsql,Sql Server,Tsql,我了解到,在执行TOP查询时,如果没有ORDER BY,SQL Server返回的结果可能会在执行之间有所不同,因为由于缺少排序,无法保证您会收到相同的TOP x值 我想知道在以下示例中是否相同: 在表person中有id、name和age列。该表包含数千行,但所有人的年龄都相同。id是唯一的 我现在想翻阅这个表格,页面大小为20页,按年龄排序 SELECT * FROM person ORDER BY age -- ,id -- is this necessary? OFFSET
TOP
查询时,如果没有ORDER BY
,SQL Server返回的结果可能会在执行之间有所不同,因为由于缺少排序,无法保证您会收到相同的TOP x值
我想知道在以下示例中是否相同:
在表person
中有id
、name
和age
列。该表包含数千行,但所有人的年龄都相同。id是唯一的
我现在想翻阅这个表格,页面大小为20页,按年龄排序
SELECT *
FROM person
ORDER BY age
-- ,id -- is this necessary?
OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY;
由于排序依据的条件匹配的记录比页面大小多得多,是否会出现与TOP
子句相同的问题?我是否必须按id
进行额外排序,以确保在浏览页面时,每条记录只出现一次
是的
orderby
是您必须告诉服务器您希望它提供什么样的订购保证的控件。任何你在“按顺序”条款中没有说的话都是系统不尊重的公平游戏
对于可靠的分页1,您需要确保在ORDER BY
子句中有足够的表达式,以便每一行的位置都是唯一定义的。对于单个表SELECT
,最容易实现这一点的方法是在任何其他排序条件之后包含所有主键列
1但请注意,这仍然假设表中的数据是静态的。在使用分页时获得“一次且仅一次”的数据显示,并面临插入、更新和删除的可能性,这可能是一件棘手的事情,通常在这里,您会接受偶尔的分页灾难。是的
orderby
是您必须告诉服务器您希望它提供什么样的订购保证的控件。任何你在“按顺序”条款中没有说的话都是系统不尊重的公平游戏
对于可靠的分页1,您需要确保在ORDER BY
子句中有足够的表达式,以便每一行的位置都是唯一定义的。对于单个表SELECT
,最容易实现这一点的方法是在任何其他排序条件之后包含所有主键列
1但请注意,这仍然假设表中的数据是静态的。在使用分页时,面对插入、更新和删除的可能性,获得“一次且仅一次”的数据显示可能会很棘手,通常在这里,您会偶尔遇到分页问题。添加Id在一定程度上会有所帮助,但无论您如何分页,SQL select语句都不是确定性的
您不能假设查询执行过程中的唯一性。添加Id在一定程度上会有所帮助,但无论如何分页,SQL select语句都不是确定性的
您不能对查询执行中的唯一性进行假设。如果数据是静态的,并且您在
ORDER BY
子句中提供了足够的表达式,以确保它们是确定性的,则它们是确定性的。它不能违反您的ORDER BY
子句,前提是它的行为正确,并且它不是故意试图引起人员问题。如果数据是静态的,则它们是确定性的,并且您在ORDER BY
子句中提供了足够的表达式,以确保它们是确定性的。它不能违反你的ORDER BY条款,如果它的行为正确,并且它不是故意试图引起人们的问题。我认为你的旁注也同样重要。这不仅关系到排序,还关系到结果集在分页查询之间的变化。谢谢,我认为你的旁注也同样重要。这不仅关系到排序,还关系到结果集在分页查询之间的变化。谢谢