`

MySQL中的ORDER BY排序实现方式

阅读更多

   总的来说,在 MySQL 中的ORDER BY有两种排序实现方式,一种是利用有序索引获取有序数据,另一种则是通过相应的排序算法,将取得的数据在内存中进行排序。

   下面将通过实例分析两种排序实现方式及实现图解:

    假设有 Table A 和 B 两个表结构分别如下:

sky@localhost : example 01:48:21> show create table A\G
*************************** 1. row ***************************
  Table: A
  Create Table: CREATE TABLE `A` (
   `c1` int(11) NOT NULL default '0',
   `c2` char(2) default NULL,
       `c3` varchar(16) default NULL,
       `c4` datetime default NULL,
  PRIMARY KEY (`c1`)
  ) ENGINE=MyISAM DEFAULT CHARSET=utf8

sky@localhost : example 01:48:32> show create table B\G
*************************** 1. row ***************************
 Table: B
   Create Table: CREATE TABLE `B` (
    `c1` int(11) NOT NULL default '0',
       `c2` char(2) default NULL,
       `c3` varchar(16) default NULL,
       PRIMARY KEY (`c1`),
       KEY `B_c2_ind` (`c2`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8

   1、利用有序索引进行排序,实际上就是当我们 Query 的 ORDER BY 条件和 Query 的执行计划中所利用的 Index  的索引键(或前面几个索引键)完全一致,且索引访问方式为 rang、 ref 或者 index 的时候,MySQL 可以利用索引顺序而直接取得已经排好序的数据。这种方式的 ORDER BY 基本上可以说是最优的排序方式了,因为 MySQL 不需要进行实际的排序操作。

假设我们在Table A 和 B 上执行如下SQL:

sky@localhost : example 01:44:28> EXPLAIN SELECT A.* FROM A,B
 -> WHERE A.c1 > 2 AND A.c2 < 5 AND A.c2 = B.c2 ORDER BY A.c1\G

***********1. row ***************************
   id: 1
   select_type: SIMPLE
   table: A
   type: range
   possible_keys: PRIMARY
   key: PRIMARY
   key_len: 4
   ref: NULL
   rows: 3

 Extra: Using where
 ************* 2. row ***************************
 id: 1
   select_type: SIMPLE
   table: B
   type: ref
   possible_keys: B_c2_ind
   key: B_c2_ind
   key_len: 7
   ref: example.A.c2
   
   rows: 2
   Extra: Using where; Using index

    我们通过执行计划可以看出,MySQL实际上并没有进行实际的排序操作,实际上其整个执行过程如下图所示:

  

    转自:http://tech.it168.com/a2009/0326/269/000000269722.shtml

  • 大小: 31 KB
分享到:
评论

相关推荐

    mysql如何根据汉字首字母排序

    select areaName from area order by convert(areaName USING gbk) COLLATE gbk_chinese_ci asc 说明:areaName为列名 area为表名 PS:这里再为大家推荐一款本站的相关在线工具供大家参考: 在线中英文根据首字母...

    解决Hibernate中MySQL的中文排序

    在这个例子中,`@OrderBy`注解使得Hibernate在查询`Article`时,根据`title`字段的GBK中文排序规则进行排序。 另外,提供的`GBKOrder.java`文件可能是实现自定义排序策略的类。在Hibernate中,可以通过实现`...

    深入解析mysql中order by与group by的顺序问题

    mysql 中order by 与group by的顺序是:selectfromwheregroup byorder by注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group ...

    MYSQL order by排序与索引关系总结1

    MySQL中的ORDER BY排序与索引关系是数据库性能优化的关键因素之一。本文主要针对InnoDB存储引擎的B-Tree索引进行探讨,不涉及索引设计,而是关注如何有效利用索引来提升查询性能。 首先,遵循**最左前缀法则**是...

    activiti5.9修复mysql order by 排序bug

    activiti5.9修复mysql order by 排序bug 详情见博客地址:http://blog.csdn.net/qq413041153/article/details/7740773#comments

    MySQL中Order By多字段排序规则代码示例

    在MySQL数据库中,`ORDER BY`子句用于对查询结果进行排序。在处理多字段排序时,MySQL遵循特定的规则来确定数据的排列顺序。本文将深入探讨这些规则,并通过代码示例进行解释。 首先,单字段排序是相对简单的。假设...

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

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

    MySQL Order By索引优化方法

    MySQL的`ORDER BY`和`GROUP BY`子句在执行查询时,对于性能的影响是显著的,尤其是在大数据量的表中。为了提高查询效率,索引优化显得至关重要。本文将详细介绍如何利用索引来优化`ORDER BY`操作。 首先,MySQL在...

    Mysql中order by、group by、having的区别深入分析

    在MySQL数据库中,ORDER BY、GROUP BY 和 HAVING 子句是SQL查询中用于数据...在实际应用中,ORDER BY、GROUP BY 和 HAVING 的组合使用可以实现更复杂的查询需求,比如多级分组和排序,以及基于分组结果的进一步筛选。

    MySQL对中文进行排序详解及实例

    例如,你可以创建一个基于汉语拼音的排序规则,并在`ORDER BY`语句中使用它。 在实践中,为了避免这些问题,建议在设计数据库时就考虑好排序需求,选择合适的字符集和排序规则。同时,确保所有相关的应用程序和...

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

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

    MySQL优化篇:排序分组优化.pdf

    在优化order by排序时,首先应当尽量利用索引来实现排序,即使用index方式排序,避免使用FileSort方式排序。FileSort是MySQL在内存中临时排序的过程,当不能利用索引排序时,MySQL会进行文件排序,这会消耗大量的CPU...

    深度分析mysql GROUP BY 与 ORDER BY

    本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表   我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下   明显。这不是我想...

    Mysql利用group by分组排序

    我们可以利用MySQL中的group by的特性。 MySQL的group by与Oracle有所不同,查询得字段可以不用写聚合函数,查询结果取得是每一组的第一行记录。 利用上面的特点,可以利用mysql实现一种独特的排序; 首先先按某个...

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

    在MySQL数据库中,Order by语句的使用频率是比较高的。但是众所周知,在使用这个语句时,往往会降低数据查询的性能。因为可能需要对数据库的记录进行重新排序。在这篇文章中,笔者就谈谈提高Order By语句查询效率的...

    MySQL ORDER BY 的实现分析

    MySQL中的`ORDER BY`语句用于对查询结果进行排序,其内部实现主要涉及两种方法:利用有序索引和内存中的排序算法。 1. **利用有序索引进行排序**: 当`ORDER BY`的条件与查询中使用的索引键完全匹配,并且查询计划...

    mysql中count(), group by, order by使用详解

    在MySQL中,`COUNT()`, `GROUP BY`, 和 `ORDER BY` 是三个非常重要的SQL语句组成部分,它们各自承担着不同的职责,同时也常被结合在一起使用以满足复杂的数据查询需求。 `COUNT()` 是一个聚合函数,它用于计算指定...

    mysql分组取每组前几条记录(排名) 附group by与order by的研究

    –按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: nameval memo a 2 a2(a的第二个值) a 1 a1–a的第一个值 a 3 a3:a的第三个值 b 1 b1–b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b ...

    mysql中order by与group by的区别

    在MySQL数据库中,`ORDER BY` 和 `GROUP BY` 是两个非常重要的子句,它们各自在数据处理中扮演着不同的角色。理解它们的区别对于优化查询性能和获取所需数据至关重要。 `ORDER BY` 子句主要用于对查询结果进行排序...

Global site tag (gtag.js) - Google Analytics