- 浏览: 421887 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (318)
- js (20)
- JQuery (2)
- Java (46)
- Oracle (4)
- mysql (21)
- ExtJs (17)
- Excel (2)
- Linux (8)
- Sql (8)
- Jsp (2)
- hibernate (12)
- jbpm (17)
- eclipse (8)
- 名博收藏 (1)
- Junit (2)
- 应用集成 (3)
- web (10)
- jboss (3)
- Rest (3)
- 其它 (7)
- 磁盘分区管理 (1)
- spring (18)
- SSO (4)
- tomcat (4)
- CSS (7)
- MemCached (6)
- EhCache (4)
- weblogic (1)
- apache (6)
- Exception design (1)
- db (1)
- 分析模式 (1)
- jstl (1)
- jsf (0)
- firefox (2)
- MongoDB (4)
- androidpn (1)
- hadoop (1)
- cvs (1)
- 微信公众号 (2)
- 高并发 (4)
- 技术论坛 (1)
- CDN (1)
- JVM (16)
- 加密 (4)
- maven (2)
- jenkins (1)
- hessian (1)
- 大数据处理 (2)
- NIO (0)
- netty (1)
- redis (1)
- git (1)
- Elastic Job (0)
最新评论
-
zgw06629:
或者<pre>aaaabbbbcccc</p ...
javaDoc注释换行 -
ddnzero:
...
StringBuffer换行 -
maosijun:
。。。。
EXT CExt.form.ComboBox选择一次后只剩一个选项 -
ysa198584:
你这有问题,当我的代码出现User.class的时候,反编绎的 ...
java的class文件批量反编译 -
dongj0325:
看到您的博客,很受启发,但还有关于jbpm4.4 timer使 ...
JBPM定时器(Timer)之Repeat属性不能使用变量
总的来说,在 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
发表评论
-
Mysql Too Many Open Files彻底解决办法
2017-02-09 18:19 5132Mysql Too Many Open Files彻底解决办 ... -
mysql快速执行超大sql脚本方法
2015-07-16 16:09 1728使用mysql数据库时,经常会碰到这个问题,特别是sql脚本 ... -
使用MySQL Proxy解决MySQL主从同步延迟
2015-05-13 11:14 538使用MySQL Proxy解决MySQL ... -
数据库sharding(scale up to scale out)
2012-11-16 10:53 686转自:http://eddysheng.iteye.com/b ... -
构建高性能web之路------mysql读写分离实战
2012-11-16 10:37 1076转自:http://blog.csdn.net/cutesou ... -
MySQL主从服务器的原理和设置
2012-11-16 10:24 776一 主从配置的原理 mysql的Replic ... -
MySQL索引分析和优化
2012-04-10 11:02 727什么是索引? 索引用 ... -
MySQL分区表的使用介绍
2012-04-10 10:27 1197MySQL使用分区表的好处: 1,可以把一些归类的数据放在一 ... -
[Err] 1153 – Got a packet bigger than ‘max_allowed_packet’ bytes
2011-10-10 19:07 918mysql> show global variables ... -
2006 - MySQL server has gone away
2011-10-10 19:05 1336命令:show global variables like ' ... -
mysql varchar长度过大引起hibernate原生态SQL错误:No Dialect mapping for JDBC type: -1错误的解决方法
2010-08-31 15:20 1718先把异常抛出来: Hibernate: select sum ... -
Mysql索引
2010-02-23 17:30 1022行, 表及文件 每个文件可以划分为数据页(Data ... -
MySQL索引类型一览 让MySQL高效运行起来
2010-02-08 10:08 2708本文介绍了七种MySQL ... -
MySQL导入导出.sql文件
2010-02-04 14:37 799MySQL导入导出: http://blog.csdn.ne ... -
Mysql:InnoDB行锁特点
2010-02-03 14:13 964InnoDB行锁特点: http://blog.chin ... -
Mysql:ROW_COUNT()返回前一个SQL进行UPDATE,DELETE,INSERT操作所影响的行数
2010-02-03 14:09 5546在Mysql中ROW_COUNT()返回前一个SQL进行UPD ... -
JDBC调用存储过程详解
2010-02-01 14:47 882最近用到在JDBC中调用Mysql存储过程: try { ... -
Mysql:存储过程中动态SQL返回多个值的写法
2010-01-30 17:48 3010DROP PROCEDURE IF EXISTS TEST; ... -
MySQL错误:Out of range value adjusted for column ...
2010-01-30 17:24 2112写Mysql存储过程时碰见了这样的错误:Out of rang ... -
“0x005346c4”指令引用的“0x00786000”内存,该内存不能为读
2009-11-08 10:43 2001Mysqld-nt.exe应用程序错误: “0x00534 ...
相关推荐
select areaName from area order by convert(areaName USING gbk) COLLATE gbk_chinese_ci asc 说明:areaName为列名 area为表名 PS:这里再为大家推荐一款本站的相关在线工具供大家参考: 在线中英文根据首字母...
在这个例子中,`@OrderBy`注解使得Hibernate在查询`Article`时,根据`title`字段的GBK中文排序规则进行排序。 另外,提供的`GBKOrder.java`文件可能是实现自定义排序策略的类。在Hibernate中,可以通过实现`...
mysql 中order by 与group by的顺序是:selectfromwheregroup byorder by注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group ...
MySQL中的ORDER BY排序与索引关系是数据库性能优化的关键因素之一。本文主要针对InnoDB存储引擎的B-Tree索引进行探讨,不涉及索引设计,而是关注如何有效利用索引来提升查询性能。 首先,遵循**最左前缀法则**是...
activiti5.9修复mysql order by 排序bug 详情见博客地址:http://blog.csdn.net/qq413041153/article/details/7740773#comments
在MySQL数据库中,`ORDER BY`子句用于对查询结果进行排序。在处理多字段排序时,MySQL遵循特定的规则来确定数据的排列顺序。本文将深入探讨这些规则,并通过代码示例进行解释。 首先,单字段排序是相对简单的。假设...
在实际开发中,我们经常需要对查询结果进行排序,MyBatisPlus为此提供了`orderBy`、`orderByDesc`和`orderByAsc`三个方法,方便我们实现条件排序。下面将详细介绍这三个方法的使用及原理。 `orderBy`方法是...
MySQL的`ORDER BY`和`GROUP BY`子句在执行查询时,对于性能的影响是显著的,尤其是在大数据量的表中。为了提高查询效率,索引优化显得至关重要。本文将详细介绍如何利用索引来优化`ORDER BY`操作。 首先,MySQL在...
在MySQL数据库中,ORDER BY、GROUP BY 和 HAVING 子句是SQL查询中用于数据...在实际应用中,ORDER BY、GROUP BY 和 HAVING 的组合使用可以实现更复杂的查询需求,比如多级分组和排序,以及基于分组结果的进一步筛选。
例如,你可以创建一个基于汉语拼音的排序规则,并在`ORDER BY`语句中使用它。 在实践中,为了避免这些问题,建议在设计数据库时就考虑好排序需求,选择合适的字符集和排序规则。同时,确保所有相关的应用程序和...
创建表&创建索引 ...MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。 通过索引优化来实现MySQL的ORDER BY语句优化: 1、ORDER BY的索引优化 如果一个SQL语句形如: SELECT
在优化order by排序时,首先应当尽量利用索引来实现排序,即使用index方式排序,避免使用FileSort方式排序。FileSort是MySQL在内存中临时排序的过程,当不能利用索引排序时,MySQL会进行文件排序,这会消耗大量的CPU...
本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表 我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下 明显。这不是我想...
我们可以利用MySQL中的group by的特性。 MySQL的group by与Oracle有所不同,查询得字段可以不用写聚合函数,查询结果取得是每一组的第一行记录。 利用上面的特点,可以利用mysql实现一种独特的排序; 首先先按某个...
在MySQL数据库中,Order by语句的使用频率是比较高的。但是众所周知,在使用这个语句时,往往会降低数据查询的性能。因为可能需要对数据库的记录进行重新排序。在这篇文章中,笔者就谈谈提高Order By语句查询效率的...
MySQL中的`ORDER BY`语句用于对查询结果进行排序,其内部实现主要涉及两种方法:利用有序索引和内存中的排序算法。 1. **利用有序索引进行排序**: 当`ORDER BY`的条件与查询中使用的索引键完全匹配,并且查询计划...
在MySQL中,`COUNT()`, `GROUP BY`, 和 `ORDER BY` 是三个非常重要的SQL语句组成部分,它们各自承担着不同的职责,同时也常被结合在一起使用以满足复杂的数据查询需求。 `COUNT()` 是一个聚合函数,它用于计算指定...
–按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: 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` 是两个非常重要的子句,它们各自在数据处理中扮演着不同的角色。理解它们的区别对于优化查询性能和获取所需数据至关重要。 `ORDER BY` 子句主要用于对查询结果进行排序...