MySQL中Order By实现原理分析

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

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

1 sky@localhost : example 01:48:21> show create table A\G
2
3 *************************** 1. row ***************************
4
5 Table: A
6
7 Create Table: CREATE TABLE `A` (
8
9 `c1` int(11) NOT NULL default '0',
10
11 `c2` char(2) default NULL,
12
13 `c3` varchar(16) default NULL,
14
15 `c4` datetime default NULL,
16
17 PRIMARY KEY (`c1`)
18
19 ) ENGINE=MyISAM DEFAULT CHARSET=utf8
20
21 sky@localhost : example 01:48:32> show create table B\G
22
23 *************************** 1. row ***************************
24
25 Table: B
26
27 Create Table: CREATE TABLE `B` (
28
29 `c1` int(11) NOT NULL default '0',
30
31 `c2` char(2) default NULL,
32
33 `c3` varchar(16) default NULL,
34
35 PRIMARY KEY (`c1`),
36
37 KEY `B_c2_ind` (`c2`)
38
39 ) ENGINE=MyISAM DEFAULT CHARSET=utf8

时间: 2024-09-04 04:12:29

MySQL中Order By实现原理分析的相关文章

MySQL中Join算法实现原理分析

在MySQL 中,只有一种 Join 算法,就是大名鼎鼎的 Nested Loop Join,他没有其他很多数据库所提供的 Hash Join,也没有 Sort Merge Join.顾名思义,Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果.如果还有第三个参与 Join,则再通过前两个表的 Join 结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复. 还是

mysql中order by与group by的区别

以下是对mysql中order by与group by的区别进行了详细的分析介绍,需要的朋友可以过来参考下   order by 从英文里理解就是行的排序方式,默认的为升序. order by 后面必须列出排序的字段名,可以是多个字段名.      group by 从英文里理解就是分组.必须有"聚合函数"来配合才能使用,使用时至少需要一个分组标志字段.  什么是"聚合函数"?  像sum().count().avg()等都是"聚合函数"  使用

关于mysql中order by与group by的问题

问题描述 关于mysql中order by与group by的问题 select * from (select * from t2 order by gidcol2 desc) as t group by gid 这条sql语句执行完之后,为什么gid的排序是增序的??? 解决方案 (select * from t2 order by gid desccol2 desc) 给gid加个desc 解决方案二: 语句先执行select * from t2 order by gidcol2 desc

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

mysql 中order by 与group by的顺序是:selectfromwheregroup byorder by注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效.要查出group by中最大的或最小的某一字段使用 max或min函数.例:select sum(click_num) as totalnum,max(update_time) as update_time,

mysql中order by 语句的用法 索引优化

MySQL Order By keyword是用来给记录中的数据进行分类的. MySQL Order By Keyword根据关键词分类 ORDER BY keyword是用来给记录中的数据进行分类的. MySQL Order By语法  代码如下 复制代码 SELECT column_name(s) FROM table_name ORDER BY column_name 注意:SQL语句是"字母大小写不敏感"的语句(它不区分字母的大小写),即:"ORDER BY"

MySQL中使用SHOW PROFILE命令分析性能的用法整理_Mysql

show profile是由Jeremy Cole捐献给MySQL社区版本的.默认的是关闭的,但是会话级别可以开启这个功能.开启它可以让MySQL收集在执行语句的时候所使用的资源.为了统计报表,把profiling设为1   mysql> SET profiling = 1;   之后在运行一个查询 mysql> SELECT COUNT(DISTINCT actor.first_name) AS cnt_name, COUNT(*) AS cnt -> FROM sakila.film

mysql中order by 和limit一起使用不当会导致效率极慢的4种优化方法

今天从慢查询发现一条语句查询时间达6秒.结果只查出一条记录. 原语句如下 SELECT biz_order_id, buyer_id, buyer_nick, gmt_create, gmt_modified, attributeCc, seller_id FROM trade.biz_order WHERE shop_id=20484 AND STATUS=4 AND gmt_create >= '2017-10-30 16:34:42' AND order_type = 6 ORDER BY

MYSQL主从不同步延迟原理分析及解决方案_Mysql

1. MySQL数据库主从同步延迟原理.要说延时原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率很比较高,下一步,问题来了,slave的Slave_SQL_Running线程将主库的DDL和DML操作在slave实施.DML和DDL的IO操作是随即的,不是顺序的,成本高很多,还可能可slave上的其他查询产生lock争

Mysql中order by语句的优化详解

在某些情况中,MySQL可以使用一个索引来满足ORDER BY子句,而不需要额外的排序.where条件和order by使用相同的索引,并且order by的顺序和索引顺序相同,并且order by的字段都是升序或者都是降序. 一.建议使用一个索引来满足Order By子句. 在条件允许的情况下,笔者建议最好使用一个索引来满足Order By子句.如此的话,就可以避免额外的排序工作.这里笔者需要强调的一点是及时Order By子句不确切匹配索引,但是只要Where子句中所有未使用的索引部分和所有