首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL-Server-2005:为什么使用(Nolock)以不同的顺序返回结果

SQL-Server-2005:为什么使用(Nolock)以不同的顺序返回结果
EN

Stack Overflow用户
提问于 2011-09-08 01:38:38
回答 4查看 118关注 0票数 0

我在col1中有一个主键聚集索引

为什么当我运行以下语句时,返回的结果顺序不同

代码语言:javascript
复制
select * from table

vs

代码语言:javascript
复制
select * from table with(nolock)

使用tablock的结果也不同。

模式:

代码语言:javascript
复制
col1 int not null
col2 varchar (8000)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-08 01:40:36

如果没有任何ORDER BY,则无法保证结果的顺序。

你的问题现在被严重截断了,但原始版本提到,当使用nolocktablock时,你会看到不同的结果顺序。

这两个锁定选项都允许SQL Server使用allocation order scan,而不是按逻辑顺序读取聚集索引数据页(跟随链接列表中的指针)。

这不应该被认为意味着在没有advanced scanning mechanism的情况下保证顺序是聚集索引顺序,或者例如并行性都可能改变这一点。

票数 4
EN

Stack Overflow用户

发布于 2011-09-08 01:42:22

除非使用ORDER BY,否则永远不能保证行的顺序。

如果您必须让行按特定顺序排列,则没有其他解决方案可以按可预测的顺序返回这些行。

如果省略order by,DBMS可以自由地以它认为最有效的任何顺序返回行

票数 3
EN

Stack Overflow用户

发布于 2011-09-08 01:43:18

Sql Server不保证排序,它将根据Sql Server优化查询的方式进行更改。

为了保证顺序,您必须使用order by子句。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7338123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档