非聚集索引对行顺序有任何保证吗?

630*_*630 9 index sql-server clustered-index nonclustered-index

我有一个开发人员希望在执行没有 order by 的 select 语句时,表中的行按照它们插入的顺序排列。开发人员建议从聚集索引更改为非聚集索引。

通过将索引从聚簇更改为非聚簇,这是否可以保证行在表中出现的顺序?

这个问题主要是为了我的好奇心;我将建议改用身份列,但这个请求让我开始思考。可以使用时间戳,但有可能同时插入行。

在此先感谢您的帮助。

Sco*_*red 30

如果您需要在查询结果中排序,请将ORDER BY. 就这么简单。

查看 SQL Server 架构师 Conor Cunningham 的这篇文章,该文章几乎总结了这个主题:


Geo*_*ios 18

绝对不是 - 没有 ORDER BY 行顺序是永远无法保证的。

选择的执行计划可能会导致所需的顺序,但如果是这样,则是偶然的。

存储顺序与结果顺序 DBA.SE 线程


Len*_*art 6

不是真的,但假设它是。如果行已经按索引排序,则 order by 的成本将非常低,因此没有理由将其排除在外。