每当我在 SQL Server Management Studio 2008(数据库是 SQL Server 2005)的表中手动插入一行时,我的新行就会出现在列表的顶部而不是底部。我正在使用身份列,这会导致诸如
id row
42 first row
1 second row
2 third row
Run Code Online (Sandbox Code Playgroud)
当获取行且未明确排序时。当为 Web 应用提取行并更改TOP 1查询返回的内容时,这会导致不同的外观。
我知道我可以order by,但为什么会发生这种情况?我的大部分数据都是通过 Web 应用程序插入的,从该应用程序插入的所有数据都按照先进先出的顺序进行,例如,最新的插入位于底部,因此 ID 都在一行中。服务器或 Management Studio 中是否有某些设置会导致这种不正确的排序?
我正在教一门课,我想向我的学生证明,如果没有明确的ORDER BY. 我观察到即使ORDER BY查询中不存在SQL Server 似乎也返回有序结果。这是一个问题,因为我担心我的学生会在这一点上感到困惑。
观察到的行为示例:
GROUP BY,结果集似乎按最后一列的顺序排列。GROUP BY this, that,以数据的顺序结束,这很奇怪,尤其是在没有索引的情况下。我还没有在其他数据库(如 MySQL、PostgreSQL 和 SQLite)中观察到这种行为。SQL Server 是否有一些根本不同的地方,即使没有ORDER BY?
现在在我看来,在没有被询问的情况下对数据进行排序是一个额外的不必要步骤,会浪费处理时间。真的吗?
是否有某种全局设置可以禁用这种行为?有没有办法让 SQL Server 停止对数据进行排序?
这也使得向学生证明数据不是自动排序的变得更加困难。
谁能给我一个简单的演示脚本,显示结果从执行到执行的变化顺序?
我有两个容器。两者是相同的。两者都是使用两个不同服务器上的相同docker-compose.yml文件启动的。两者具有相同的数据。完全相同(一个在另一个中备份并恢复)。
然而,对于同一查询,我得到了不同的排序。
这是我的查询:
SELECT `i`.`Id`,
`i`.`Guid`,
`i`.`Key`,
`i`.`Name`,
`i`.`Order`,
`i`.`PartTypeId`,
`i`.`PartTypeKey`,
`i`.`SectionId`,
`i`.`SectionKey`
FROM `ItemPartViews` AS `i`
WHERE `i`.`SectionId` = 7
ORDER BY `i`.`Order`
Run Code Online (Sandbox Code Playgroud)
这些是结果的图像:
我不明白为什么我会得到不同的排序。任何解释表示赞赏。