`
smartgear
  • 浏览: 7095 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

没有order by语句时结果集是按什么排序的

 
阅读更多

我们知道在sql中order by子句用来控制返回的结果集中记录的顺序。那么当我们的sql没有提供order by子句时,返回的记录是按什么排序的呢。簇索引?主键?这是我之前以为的答案,直到我认真地google了一下这个问题。

答案是,没有顺序,每次的结果不一定。

stackoverflow上有一个哥们回答了这个问题

https://stackoverflow.com/questions/20050341/when-no-order-by-is-specified-what-order-does-a-query-choose-for-your-record

为了增加自己答案的说服力,他引用了一篇sql server 核心组架构师Conor Cunningham的帖子。这篇帖子大意是这样的,大家认为sql语句返回的记录集是有顺序的,通常的原因是,对于相同的sql,数据库经常使用同一个查询计划进行查询,所以每次返回的结果看起来是相同的。但这并不是固定不变的,我们并不能预见数据库采用怎样的查询计划。Conor Cunningham在自己的机器上做了一个实验。一张表只有一个簇索引。向表中插入20k数据,执行一个select语句,数据库执行了在簇索引上的扫描。向表中插入另外20k数据,再次执行相同的sql, 这一次,数据库执行了一个并行的查询计划,多个thread并发做簇索引扫描,并且把满足条件的记录合并起来,这导致了返回的数据集顺序不定。通过这个简单的例子我们确定了,没有order by子句,就不要期望结果集有顺序。

对详情感兴趣的同学可以去阅读Conor Cunningham的原贴

https://blogs.msdn.microsoft.com/conor_cunningham_msft/2008/08/27/no-seatbelt-expecting-order-without-order-by/

 

分享到:
评论

相关推荐

    Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出

    在文中提到的例子中,即使为列添加了索引,`ORDER BY`操作仍然没有按照预期进行,这主要是因为`ROWNUM`不是一个稳定的排序依据,它只是表示查询结果集的顺序,而不是数据本身的物理存储顺序。 `ROWID`是Oracle...

    group by + order by

    `ORDER BY` 用于对结果集按照一个或多个列进行排序,可以指定升序(ASC,默认)或降序(DESC)。 - **基本语法**: ```sql SELECT column1, column2, ..., columnN FROM table_name ORDER BY column1 ASC/DESC,...

    union all与order by用法

    当我们使用 UNION ALL 合并多个 SELECT 语句的结果集时,如果我们想要对整个结果集进行排序,就需要使用 ORDER BY 子句。但是,需要注意的是,ORDER BY 子句只能在 UNION ALL 的最后一个子查询中使用,否则将会报错...

    mysql中提高Order by语句查询效率的两个思路分析

    在这篇文章中,笔者就谈谈提高Order By语句查询效率的两个思路,以供大家参考。 在MySQL数据库中,Order by语句的使用频率是比较高的。但是众所周知,在使用这个语句时,往往会降低数据查询的性能。因为可能需要对...

    MyBatisPlus条件构造器带条件排序方法orderBy、orderByDesc、orderByAsc使用示例代码

    在实际开发中,我们经常需要对查询结果进行排序,MyBatisPlus为此提供了`orderBy`、`orderByDesc`和`orderByAsc`三个方法,方便我们实现条件排序。下面将详细介绍这三个方法的使用及原理。 `orderBy`方法是...

    Into,top,orderby(保存结果集,top,排序)子句.pdf

    在SQL查询中,`Into`、`Top`和`OrderBy`子句是用于处理和操纵结果集的关键元素。本文档主要介绍了如何使用这些子句在数据库查询中进行数据选择、限制返回行数以及对结果进行排序。 首先,`SELECT`语句是查询的基础...

    MySQL利用索引优化ORDER BY排序语句的方法

    创建表&创建索引 ...MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。 通过索引优化来实现MySQL的ORDER BY语句优化: 1、ORDER BY的索引优化 如果一个SQL语句形如: SELECT

    数据库笔试题之查询语句where,group by,having,order by执行与编写顺序详解

    特别是在WHERE、GROUP BY、HAVING、ORDER BY同时出现时,执行顺序和编写顺序变得尤为重要。本文将详细介绍WHERE、GROUP BY、HAVING、ORDER BY的执行顺序和编写顺序,以及它们之间的关系。 一、WHERE子句的执行顺序 ...

    order by 、group by 、having的用法

    - `ORDER BY` 用于对查询结果进行排序,按照指定的字段进行升序或降序排列。默认情况下,`ORDER BY` 排序方式为升序(ASC)。例如,`SELECT * FROM table ORDER BY column1` 将按`column1`的值升序排列所有记录。 ...

    MySQL中select语句使用order按行排序

    - `<排序字段和方式>`:使用`ORDER BY`子句对结果集进行排序,格式为`<字段名> <排序方式>`。`<字段名>`是你希望根据其排序的列,`<排序方式>`可以是`ASC`(升序)或`DESC`(降序)。 举例来说,如果你有一个名为`...

    经典sql语句,sql语句集

    - `ORDER BY`:对查询结果进行排序,`ASC`表示升序,`DESC`表示降序。 4. **连接查询**: - `INNER JOIN`:返回两个表中存在匹配的记录。 - `LEFT JOIN`:返回左表的所有记录,即使右表没有匹配的记录。 - `...

    VB 查询结果排序

    这种方法适用于与数据库交互时,结果集在数据库端就已排序好。 5. **LINQ排序**: LINQ(Language Integrated Query)是VB.NET的一个强大特性,可以方便地对各种数据源进行查询和排序。使用`OrderBy()`或`...

    SQL Server2008 Order by在union子句不可直接使用的原因详解

    在SQL Server 2008中,`UNION` 子句用于合并两个或多个 `SELECT` 语句的结果集,但不允许直接在 `UNION` 子句内部使用 `ORDER BY`。这是因为 `ORDER BY` 通常用于对查询结果进行排序,而 `UNION` 的目的是合并不同的...

    SQL的ORDER BY 关键字,INSERT INTO语句,UPDATE语句,DELETE语句

    `ORDER BY`用于对SQL查询返回的结果集进行排序。默认情况下,排序是按升序(ASC)进行的。如果你想进行降序排序,可以在列名后面加上`DESC`关键字。基本语法如下: ```sql SELECT column_name1, column_name2 FROM ...

    sql语句大全 语句操作全集

    4. 排序:ORDER BY用于对结果进行升序(ASC)或降序(DESC)排序。例如,按订单数量降序显示用户:`SELECT user_id, COUNT(*) FROM orders GROUP BY user_id ORDER BY COUNT(*) DESC;` 5. 条件筛选:WHERE子句可...

    sql经典基础语句集

    你可以学习如何根据需要选择列、过滤行(WHERE子句)、组合多个表(JOIN操作)、排序结果(ORDER BY子句)以及分组数据(GROUP BY子句)。 3. **INSERT INTO 语句**:用于向数据库表中插入新记录。需要指定表名和要...

    MySQL Order by 语句用法与优化详解

    MySQL的`ORDER BY`语句是SQL查询中用于对结果集进行排序的关键部分,它可以按照指定的列或列组合对数据进行升序(`ASC`)或降序(`DESC`)排列。在处理大量数据时,优化`ORDER BY`对于提高查询效率至关重要。 首先,...

    arcgis中的sql语句

    - **排序**:如`SELECT * FROM table1 ORDER BY field1, field2 DESC`,DESC表示降序排列。 - **聚合函数**:如求总数(`COUNT`)、求和(`SUM`)、平均值(`AVG`)、最大值(`MAX`)和最小值(`MIN`)。 ##### 3. 高级查询...

    sql查询和排序

    此外,`ORDER BY`还可以同时对多个列进行排序,如先按部门再按薪水排序: ```sql SELECT * FROM Employees ORDER BY Department, Salary DESC; ``` 在这个例子中,如果部门相同,会按照薪水进行降序排列。 除了...

Global site tag (gtag.js) - Google Analytics