search 2013 adfgs

今天在网上搜索资料,在百度中搜索了一个 MySQL Order By,居然发现我的一篇分析 MySQL Order By 实现原理的文章 “MySQL Order By 的实现分析” 居然排名第一,有点惊喜加意外啊,如图: 后来又尝试了一下 MySQL Group By,居然又是我的一篇分i析 MySQL Group By 实现原理的文章 “MySQL 中 GROUP BY 基本实现原理”,有点兴奋啊,如图: 再来一个 MySQL Replication,这次带来的不是兴奋了,而是很不爽。为啥?因为排名第一的仍然是我的一篇文章“MySQL Replication(复制)基本原理”,但是其他人转载,点开来一看,居然没有任何原作者信息和原文链接地址 ,如图: 自己写的文章能被大家认可并转载,本是一件值得开心让人欣慰的事情,可看到没有任何说明及链接信息,心里还是很不是滋味。

, ,

接上一篇: MySQL 中 GROUP BY 基本实现原理 DISTINCT 实际上和 GROUP BY 操作的实现非常相似,只不过是在 GROUP BY 之后的每组中只取出一条记录而已。所以,DISTINCT 的实现和 GROUP BY 的实现也基本差不多,没有太大的区别。同样可以通过松散索引扫描或者是紧凑索引扫描来实现,当然,在无法仅仅使用索引即能完成 DISTINCT 的时候,MySQL 只能通过临时表来完成。但是,和 GROUP BY 有一点差别的是,DISTINCT 并不需要进行排序。也就是说,在仅仅只是 DISTINCT 操作的 Query 如果无法仅仅利用索引完成操作的时候,MySQL 会利用临时表来做一次数据的“缓存”,但是不会对临时表中的数据进行 filesort 操作。当然,如果我们在进行 DISTINCT 的时候还使用了 GROUP BY 并进行了分组,并使用了类似于 MAX 之类的聚合函数操作,就无法避免 filesort 了。 下面我们就通过几个简单的 Query 示例来展示一下 DISTINCT 的实现。 1.首先看看通过松散索引扫描完成 DISTINCT 的操作: sky@localhost : example 11:03:41> EXPLAIN SELECT […]

, , ,

之前连着写了几篇关于 MySQL 中常用操作的一些基本实现原理,如,MySQL ORDER BY,MySQL Join,这次再写一篇 MySQL 中 GROUP BY 的基本实现原理。 由于 GROUP BY 实际上也同样会进行排序操作,而且与 ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组操作。当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的计算。所以,在GROUP BY 的实现过程中,与 ORDER BY 一样也可以利用到索引。 在 MySQL 中,GROUP BY 的实现同样有多种(三种)方式,其中有两种方式会利用现有的索引信息来完成 GROUP BY,另外一种为完全无法使用索引的场景下使用。下面我们分别针对这三种实现方式做一个分析。 1.使用松散(Loose)索引扫描实现 GROUP BY 何谓松散索引扫描实现 GROUP BY 呢?实际上就是当 MySQL 完全利用索引扫描来实现 GROUP BY 的时候,并不需要扫描所有满足条件的索引键即可完成操作得出结果。 下面我们通过一个示例来描述松散索引扫描实现 GROUP BY,在示例之前我们需要首先调整一下 group_message 表的索引,将 gmt_create 字段添加到 group_id 和 user_id 字段的索引中: […]

, ,