search 2013 adfgs

前段时间看了 mysqlperformance blog 上一篇关于 filesort 的文章 ,看到 Percona 公司在招聘面试的时候常问应聘者“Explain 命令输出中的 filesort 的含义是什么”这个问题,而且基本上都得不到正确的答案,甚感奇怪。 按理这是非常基础的内容了,既然敢于去 Percona 这样高手如云的公司应聘,不应该不清楚这个问题吧。 所以我也试探性的问了 MySQL圈子 中的几位朋友这个问题,结果和 Percona 所遇到的情况基本一样,仅有 1/10 的朋友真正明白 filesort 的含义,而且给出的错误答案也都和 Percona应聘者的答案差不多:是 mysql 在进行排序的时候,临时表太大,超出 MySQL 限制,需要将数据写出到磁盘文件中进行排序,所以称之为filesort。 这个“貌似正确”的答案,大部分都是因为 “filesort” 这个词的字面含义所误导猜测出来的。看来并不仅仅只有中国人喜欢“望文生义”,老外也是一样嘛! 那 Explain 命令输出信息中的 filesort 到底是什么意思呢?其实很简单,就是告诉你 MySQL 需要进行实际的排序操作而不能通过索引获得已排序数据。 个人觉得上面的错误答案其实至少错了以下两点: filesort(其实就是排序) 可不一定会产生临时表哦 filesort 与临时表数据写入磁盘是没有任何直接联系的 上面两点错误中第一点在 MySQL Performance Blog 的文章中也提到了。 实际上,在我之前的一篇文章 MySQL ORDER BY 的实现分析 中已经很清楚的分析了 […]

, , ,

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

, ,

总的来说,在 MySQL 中的ORDER BY有两种排序实现方式,一种是利用有序索引获取有序数据,另一种则是通过相应的排序算法,将取得的数据在内存中进行排序。 下面将通过实例分析两种排序实现方式及实现图解: 假设有 Table A 和 B 两个表结构分别如下: sky@localhost : example 01:48:21> show create table A\G*************************** 1. row ***************************Table: ACreate 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. […]

, ,