SELECT * FROM Table不是按插入顺序检索行

时间:2017-03-23 06:43:29

标签: sql-server

我有一个包含100k行的表,每行都会生成ID。 当我从表中执行Select *时,它不会按插入的顺序检索行。

结果集按照ID的顺序进行洗牌。

是否需要ORDER BY?为什么不按插入顺序检索。

2 个答案:

答案 0 :(得分:4)

是的,唯一保证查询返回结果的顺序是在该查询的最外层应用ORDER BY子句。

您可能观察到的任何其他信息,可能会让您相信特定订单会更受欢迎,巧合

如果广告订单对您很重要,我建议您明确将其存储在datetime2列中 - 因为我通常也建议您不要在<{1}}列中添加任何含义IDENTITY列的em> numeric 值 - 将其视为发生的不透明blob以适合数字列,并且您将避免其他很多以后的问题(请参阅本网站上关于为什么IDENTITY列包含间隙或跳过1000以查明原因的~~半个问题)

答案 1 :(得分:3)

是。 ORDER BY是以特定顺序获取select语句的结果所必需的。这是因为关系数据库中的表本质上是无序集 没有关系数据库可以保证从没有order by子句的select语句返回的记录的顺序 虽然您可能会多次运行相同的行而不是按顺序运行相同的行,但不能保证每次按特定顺序返回。

来自维基百科的relational databases:页面(强调我的)

  

关系被定义为具有相同属性的一组元组。元组通常表示对象和有关该对象的信息。对象通常是物理对象或概念。关系通常被描述为一个表,它被组织成行和列。属性引用的所有数据都在同一个域中,并且符合相同的约束条件。

     

关系模型指定关系的元组没有特定的顺序,而元组又不对属性施加任何顺序。应用程序通过指定查询来访问数据,这些操作使用选择以识别元组,项目以识别属性,并加入以组合关系。可以使用insert,delete和update运算符修改关系。新元组可以提供显式值或从查询派生。同样,查询标识用于更新或删除的元组。