Man*_*ngo -1 sql-server select
我需要弄清楚这里的订单是什么意思。我只是询问获取数据的顺序。
如果我只是SELECT * FROM table;
在没有ORDER BY
子句的SQL Server 中,我发现结果总是以相同的顺序出现。对于其他一些数据库服务器,例如 PostgreSQL,情况肯定不是这样。
观察到的行为真的发生了吗?我认为结果将按照添加行的顺序返回。
我还没有尝试过使用非常大的表格,但我使用过的表格似乎确实如此。
笔记:
此问题仅与 SQL Server 相关。我非常理解 SQL 本身没有首选顺序,这是我使用其他数据库的经验。
关键是 SQL Server 似乎更喜欢分配顺序,我想知道这是否属实。
笔记2:
至于这个问题可能是重复的,我对为什么特别在任何地方添加行不感兴趣。我只是想知道它们是否按分配顺序正常返回......
小智 11
没有“默认顺序”。您将只如果你使用获取特定的排序顺序order by
。
如果没有order by
,数据库可以自由地以它认为最有效的任何顺序返回行。
例如,请参阅Conor Cunningham(软件架构师,Microsoft SQL Server 引擎)的No Seatbelt – Expecting Order withoutORDER BY
。
我发现结果总是以相同的顺序出现。
您可能会观察到这一点,但不能保证。您观察到的行为可能随时发生变化,即使在同一数据库上执行同一查询之间,相隔几毫秒也是如此。
我认为结果将按照添加行的顺序返回。
不,这不是一个安全的假设。同样,您可能会在某个测试中观察到它(您没有提供这样的测试,因此很难确切地知道您指的是什么)。它可能会发生,例如将少量行插入行存储堆,但这纯粹是一个实现细节,您不能依赖于保持不变。
我还没有尝试过使用非常大的表格,但我使用过的表格似乎确实如此。
好的。对于较大的表(或不同的存储引擎,或不同的服务器配置设置,或...),您可能会看到不同的结果
关键是 SQL Server 似乎更喜欢分配顺序,我想知道这是否属实。
不。按分配顺序扫描页面是执行引擎可用的一种选择,但在任何主动或设计意义上都不是“首选”。当然,引擎按顺序遍历 b 树索引可能是有意义的,但这并不能保证表示顺序。在您之前的一个问题的答案之一中有一个这样的例子。
我只是想知道它们是否按分配顺序正常返回......
如果“分配顺序”是指插入行的顺序,是的,这可能很常见,对于非常简单的表上的非常简单的查询,除了插入之外从未见过任何东西。
如果“分配顺序”是指页面 ID 顺序(SQL Server 短语的正常含义),则不:非分配顺序扫描是更常见的类型。但同样,所有这些观察结果都是取决于测试条件的变量,其中一些概念只存在于行模式引擎。
归档时间: |
|
查看次数: |
4373 次 |
最近记录: |