七 31 MySQL源代码:关于MySQL的Item对象 发布时间:2013 年 7 月 31 日 发布者: OurMySQL 前篇介绍了MySQL如何从SQL语句转换成一个内部对象。本文是前篇的延续,将更加详细的介绍WHERE语句对应的Item对象。 继续阅读全文 →
七 31 MySQL源代码:从SQL语句到MySQL内部对象 发布时间:2013 年 7 月 31 日 发布者: OurMySQL 优化器是关系数据库的一个重要而有特色的部分,优化器的理论和实践也多半也都很复杂,本系列文章希望通过解析MySQL优化器,来用好MySQL,扬其长,避其短。顺便也一窥关系数据库优化器的实现思路。文章将重点介绍重要的数据结构和数据结构之间的关系,而不是侧重于代码。 继续阅读全文 →
六 02 InnoDB Memcached Plugin源码实现调研 发布时间:2013 年 6 月 2 日 发布者: OurMySQL MySQL 5.6版本,新增了一个NoSQL的接口,通过将memcached嵌入到MySQL系统之中,用户可以直接使用memcached接口直接操作MySQL中的InnoDB表,绕过MySQL Server层面的SQL解析,优化,甚至绕过InnoDB Handler层,直接操作InnoDB内部的方法,从而达到更优的响应时间与效率。 继续阅读全文 →
五 08 MySQL开发流程介绍 发布时间:2013 年 5 月 8 日 发布者: OurMySQL 通过文中的过程,TRUNK上会不停的累积功能和缺陷修复的代码。额外的回归测试(Regression testing)一刻不停的在TRUNK上执行,以保证TRUNK始终能够保持候选发布版本(Release Candidate)的质量。 继续阅读全文 →
四 06 mysqldump的流程 发布时间:2013 年 4 月 6 日 发布者: OurMySQL 前几天看到群里在讨论mysqldump导致锁表的问题,为什么一个表已经dump完了还会被锁住?mysqldump里面到底是怎么处理的,为了解答这些问题,就来看看mysqldump.cc中的实现吧。 继续阅读全文 →
三 05 MySQL源码:Range优化相关的数据结构 发布时间:2013 年 3 月 5 日 发布者: OurMySQL 泛读了整个MySQL Range优化的相关代码,这里将总结Range优化相关的数据结构。本文不是从宏观(High Level)角度介绍Range优化相关内容,如果看客对此感兴趣,建议绕过本文,直接阅读参考文献,相信会有收获。 继续阅读全文 →
三 05 MySQL源码:Range和Ref优化的成本评估 发布时间:2013 年 3 月 5 日 发布者: OurMySQL MySQL的一个执行计划,有两部分成本,CPU成本(CPU COST)和IO成本(IO COST)。CPU COST是指查询出纪录后,需要做过滤等处理的时候的CPU消耗,IO COST是指,从存储引擎读取数据时需要做的IO消耗。 总成本 = CPU COST + IO COST 补充说明:(1) IO成本计算不考虑缓存的影响。因为在优化器本身是无法预知需要的数据到底在内存中还是磁盘上。 继续阅读全文 →
三 05 MySQL源码:JOIN顺序选择的复杂度 发布时间:2013 年 3 月 5 日 发布者: OurMySQL 在看MySQL优化器代码过程中,这应该是相对较简单/代码较清晰的部分了。MySQL优化器有两个自由度:单表访问方式,多表顺序选择。前文已经介绍过MySQL单表访问的一些考量(ref/range等),本文将介绍JOIN在顺序选择上的复杂度分析。 继续阅读全文 →
二 19 InnoDB一定会在索引中加上主键吗 发布时间:2013 年 2 月 19 日 发布者: OurMySQL 由衷的建议,所有的DBA建索引的时候,都在业务要求的索引字段后面补上主键字段,这没有任何损失,但是可能给你带来意外的惊喜。 继续阅读全文 →
二 19 InnoDB实现独立表空间多数据文件 (InnoDB multiple datafiles per single-tablespace) 发布时间:2013 年 2 月 19 日 发布者: OurMySQL 我们知道,在Oracle中,每个表空间都可以由很多文件组成,这样文件的IO就可以分散在很多存储路径上。虽然MySQL的服务器一般来说不会配置多路径存储,但是,很多老式文件系统(例如EXT3)对大文件的IO操作支持不好,性能很差,所以对MySQL/InnoDB来说,把数据文件大小控制在比较小的范围,也是有好处的。 继续阅读全文 →