我在col1中有一个主键聚集索引
为什么当我运行以下语句时,返回的结果顺序不同
select * from tablevs
select * from table with(nolock)使用tablock的结果也不同。
模式:
col1 int not null
col2 varchar (8000)发布于 2011-09-08 01:40:36
如果没有任何ORDER BY,则无法保证结果的顺序。
你的问题现在被严重截断了,但原始版本提到,当使用nolock和tablock时,你会看到不同的结果顺序。
这两个锁定选项都允许SQL Server使用allocation order scan,而不是按逻辑顺序读取聚集索引数据页(跟随链接列表中的指针)。
这不应该被认为意味着在没有advanced scanning mechanism的情况下保证顺序是聚集索引顺序,或者例如并行性都可能改变这一点。
发布于 2011-09-08 01:42:22
除非使用ORDER BY,否则永远不能保证行的顺序。
如果您必须让行按特定顺序排列,则没有其他解决方案可以按可预测的顺序返回这些行。
如果省略order by,DBMS可以自由地以它认为最有效的任何顺序返回行
发布于 2011-09-08 01:43:18
Sql Server不保证排序,它将根据Sql Server优化查询的方式进行更改。
为了保证顺序,您必须使用order by子句。
https://stackoverflow.com/questions/7338123
复制相似问题