我有一个包含100k行的表,每行都会生成ID
。
当我从表中执行Select *
时,它不会按插入的顺序检索行。
结果集按照ID的顺序进行洗牌。
是否需要ORDER BY
?为什么不按插入顺序检索。
答案 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运算符修改关系。新元组可以提供显式值或从查询派生。同样,查询标识用于更新或删除的元组。