我们知道在sql中order by子句用来控制返回的结果集中记录的顺序。那么当我们的sql没有提供order by子句时,返回的记录是按什么排序的呢。簇索引?主键?这是我之前以为的答案,直到我认真地google了一下这个问题。
答案是,没有顺序,每次的结果不一定。
stackoverflow上有一个哥们回答了这个问题
为了增加自己答案的说服力,他引用了一篇sql server 核心组架构师Conor Cunningham的帖子。这篇帖子大意是这样的,大家认为sql语句返回的记录集是有顺序的,通常的原因是,对于相同的sql,数据库经常使用同一个查询计划进行查询,所以每次返回的结果看起来是相同的。但这并不是固定不变的,我们并不能预见数据库采用怎样的查询计划。Conor Cunningham在自己的机器上做了一个实验。一张表只有一个簇索引。向表中插入20k数据,执行一个select语句,数据库执行了在簇索引上的扫描。向表中插入另外20k数据,再次执行相同的sql, 这一次,数据库执行了一个并行的查询计划,多个thread并发做簇索引扫描,并且把满足条件的记录合并起来,这导致了返回的数据集顺序不定。通过这个简单的例子我们确定了,没有order by子句,就不要期望结果集有顺序。
对详情感兴趣的同学可以去阅读Conor Cunningham的原贴
相关推荐
在文中提到的例子中,即使为列添加了索引,`ORDER BY`操作仍然没有按照预期进行,这主要是因为`ROWNUM`不是一个稳定的排序依据,它只是表示查询结果集的顺序,而不是数据本身的物理存储顺序。 `ROWID`是Oracle...
`ORDER BY` 用于对结果集按照一个或多个列进行排序,可以指定升序(ASC,默认)或降序(DESC)。 - **基本语法**: ```sql SELECT column1, column2, ..., columnN FROM table_name ORDER BY column1 ASC/DESC,...
当我们使用 UNION ALL 合并多个 SELECT 语句的结果集时,如果我们想要对整个结果集进行排序,就需要使用 ORDER BY 子句。但是,需要注意的是,ORDER BY 子句只能在 UNION ALL 的最后一个子查询中使用,否则将会报错...
在这篇文章中,笔者就谈谈提高Order By语句查询效率的两个思路,以供大家参考。 在MySQL数据库中,Order by语句的使用频率是比较高的。但是众所周知,在使用这个语句时,往往会降低数据查询的性能。因为可能需要对...
在实际开发中,我们经常需要对查询结果进行排序,MyBatisPlus为此提供了`orderBy`、`orderByDesc`和`orderByAsc`三个方法,方便我们实现条件排序。下面将详细介绍这三个方法的使用及原理。 `orderBy`方法是...
在SQL查询中,`Into`、`Top`和`OrderBy`子句是用于处理和操纵结果集的关键元素。本文档主要介绍了如何使用这些子句在数据库查询中进行数据选择、限制返回行数以及对结果进行排序。 首先,`SELECT`语句是查询的基础...
在实际开发过程中,当尝试通过动态SQL的方式实现排序功能时,可能会遇到一个常见问题:使用`order by #{sortInfo}`进行排序时,发现查询结果并未按照预期排序。例如,若传入的排序参数为`empno desc`,则期望的结果...
创建表&创建索引 ...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子句的执行顺序 ...
- `ORDER BY` 用于对查询结果进行排序,按照指定的字段进行升序或降序排列。默认情况下,`ORDER BY` 排序方式为升序(ASC)。例如,`SELECT * FROM table ORDER BY column1` 将按`column1`的值升序排列所有记录。 ...
- `<排序字段和方式>`:使用`ORDER BY`子句对结果集进行排序,格式为`<字段名> <排序方式>`。`<字段名>`是你希望根据其排序的列,`<排序方式>`可以是`ASC`(升序)或`DESC`(降序)。 举例来说,如果你有一个名为`...
- `ORDER BY`:对查询结果进行排序,`ASC`表示升序,`DESC`表示降序。 4. **连接查询**: - `INNER JOIN`:返回两个表中存在匹配的记录。 - `LEFT JOIN`:返回左表的所有记录,即使右表没有匹配的记录。 - `...
这种方法适用于与数据库交互时,结果集在数据库端就已排序好。 5. **LINQ排序**: LINQ(Language Integrated Query)是VB.NET的一个强大特性,可以方便地对各种数据源进行查询和排序。使用`OrderBy()`或`...
在SQL Server 2008中,`UNION` 子句用于合并两个或多个 `SELECT` 语句的结果集,但不允许直接在 `UNION` 子句内部使用 `ORDER BY`。这是因为 `ORDER BY` 通常用于对查询结果进行排序,而 `UNION` 的目的是合并不同的...
`ORDER BY`用于对SQL查询返回的结果集进行排序。默认情况下,排序是按升序(ASC)进行的。如果你想进行降序排序,可以在列名后面加上`DESC`关键字。基本语法如下: ```sql SELECT column_name1, column_name2 FROM ...
4. 排序:ORDER BY用于对结果进行升序(ASC)或降序(DESC)排序。例如,按订单数量降序显示用户:`SELECT user_id, COUNT(*) FROM orders GROUP BY user_id ORDER BY COUNT(*) DESC;` 5. 条件筛选:WHERE子句可...
你可以学习如何根据需要选择列、过滤行(WHERE子句)、组合多个表(JOIN操作)、排序结果(ORDER BY子句)以及分组数据(GROUP BY子句)。 3. **INSERT INTO 语句**:用于向数据库表中插入新记录。需要指定表名和要...
MySQL的`ORDER BY`语句是SQL查询中用于对结果集进行排序的关键部分,它可以按照指定的列或列组合对数据进行升序(`ASC`)或降序(`DESC`)排列。在处理大量数据时,优化`ORDER BY`对于提高查询效率至关重要。 首先,...
- **排序**:如`SELECT * FROM table1 ORDER BY field1, field2 DESC`,DESC表示降序排列。 - **聚合函数**:如求总数(`COUNT`)、求和(`SUM`)、平均值(`AVG`)、最大值(`MAX`)和最小值(`MIN`)。 ##### 3. 高级查询...