第 1 章 MySQL 基本介绍 前言: 作为最为流行的开源数据库软件之一,MySQL 数据库软件已经是广为人知了。但是为了 照顾对 MySQL 还不熟悉的读者,这章我们将对 MySQL 做一个简单的介绍。主要内容包括 MySQL 各功能模块组成,各模块协同工作原理,Query 处理的流程等。 1.1 MySQL Server 简介 1.1.1 什么是 MySQL MySQL 是由 MySQL AB 公司(目前已经被 SUN 公司收归麾下)自主研发的,目前 IT 行业 最流行的开放源代码的数据库管理系统之一,它同时也是一个支持多线程高并发多用户的关 系型数据库管理系统。 MySQL 数据库以其简单高效可靠的特点,在最近短短几年的时间就从一个名不见经传的 数据库系统,变成一个在 IT 行业几乎是无人不知的开源数据库管理系统。从微型的嵌入式 系统,到小型的 web 网站,至大型的企业级应用,到处都可见其身影的存在。为何一个开源 的数据库管理系统会变得如此的流行呢?在我 2003 年第一次接触 MySQL 之前,也是非常的 纳闷?或许在我大概的向您介绍一下其发展历程之后,心中的这个问题就会消失了。 1.1.2 艰难诞生 1985 年,瑞典的几位志同道合小伙子(以 David Axmark 为首 ) 成立了一家公司,这 就是 MySQL AB 的前身。这个公司最初并不是为了开发数据库产品,而是在实现他们想法的 过程中,需要一个数据库。他们希望能够使用开源的产品。但在当时并没有一个合适的选择 , 没办法,那就自己开发吧。 在最初,他们只是自己设计了一个利用索引顺序存取数据的方法,也就是 IS AM(Indexed Sequential Access Method)存储引擎核心算法的前身,利用 ISAM 结合 mSQL 来实现他们的 应用需求。在早期,他们主要是为瑞典的一些大型零售商提供数据仓库服务。在系统使用过 程中,随着数据量越来越大,系统复杂度越来越高,ISAM 和 mSQL 的组合逐渐不堪重负。在 分析性能瓶颈之后,他们发现问题出在 mSQL 上面。不得已,他们抛弃了 mSQL,重新开发了 一套功能类似的数据存储引擎,这就是 ISAM 存储引擎。大家可能已经注意到他们当时的主 要客户是数据仓库,应该也容易理解为什么直至现在,MySQL 最擅长的是查询性能,而不是 事务处理(需要借助第三方存储引擎)。 软件诞生,自然该给她取一个好听并且容易记住的名字。时至今日,MySQL AB 仍然没 有公布当初为什么给这个数据库系统取名为 MySQL。据传 MySQL 是取自创始人之一 Monty Widenius 的女儿的名字或许大家会认为这仅仅是我的猜测,不以为然,其实也并不是完全 没有根据的。大家或许知道 MySQL 最近正在研发的用来替代 MyISAM 存储引擎的新一代存储 引擎产品 Maria,为什么叫 Maria? 笔者对 这个 问题 也比 较感 兴趣,曾经 和 MySQL 前 CTO David 沟通过 。得 到的 答案 是, Maria 是以他 小女 儿的 名字 命名 的。 看来 ,这 是几 位 MySQL 的创始 人 为自己的软件命名的一个习惯。 在 MySQL 诞生之初,其功能还非常粗糙,和当时已经成熟稳定运营多年的商业数据库管 理系统完全不能比。MySQL 之所以能够成功,和几个创始人最初采用的策略关系非常大。 1.1.3 寻求发展 MySQL 诞生的时候,正是互联网开始高速发展的时期。MySQL AB 通过优化 MySQL 满足了 互联网开发用者对数据库产品的需求:标准化查询语言的支持,高效的数据存取,不必关注 事务完整性,简单易用,而且成本低廉。当时大量的小公司都愿意采用 MySQL 作为数据库应 用系统的数据库管理系统,所以 MySQL 的用户数量不断的增长,进一步促进了 MySQL 自身 的不断改进和完善,进入了一个非常好的良性循环。 合理地把握需求, 准确地定位目标客户,为 MySQL 后面的发展铺平了道路。我们看到, MySQL 一开始就没有拿大型的企业管理软件的数据库系统来定位自己,没有将所有的 IT 行 业定位为自己的目标用户,而是选择的当时并不受重视的一小部分 Web 开发者作为自己的客 户来重点培养发展。这种做法或许值得我们的 IT 企业学习。 1.1.4 巨人崛起 可以说,正是 MySQL 最初抓住了互联网客户,造就了今天 MySQL 在互联网行业的巨大成 功。当然,MySQL 的高速发展,同时也离不开另外一个很关键的因素,那就是开放源代码。 在 2000 年的时候,MySQL 公布了自己的源代码,并采用 GPL(GNU General Public License)许可协议,正式进入开源世界。虽然在当时的环境下,开源还没有现在这样流行, 但是那是开源世界开始真正让大多数世人所接受并开始推崇的起步阶段。当然 MySQL 的成功 并不仅仅是因为以上的这些原因,但我们不能否认正是 MySQL 这一战略性质的策略让 MySQL 在进一步拓展自己的客户群 的路上一路东风。此后 MySQL 的发展路程我想就不需要我继续 再次罗嗦了,因为基本上都可以从 MySQL 的官方网站(http://www.mysql.com)得到相应的 答案。 1.2 MySQL 与其他数据库的简单比较 前面我们简单介绍了 MySQL 的发展历程,从中了解了 MySQL 快速崛起的必要的条件。接 下来,我们通过 MySQL 在功能,性能,以及其易用性方面和其他主流的数据库做一个基本的 比较,来了解一下 MySQL 成为当下最流行的开源数据库软件的充分条件。 1.2.1 功能比较 作为一个成熟的数据库管理系统,要满足各种各样的商业需求,功能肯定是会被列入重 点参考对象的。MySQL 虽然在早期版本的时候功能非常简单,只能做一些很基础的结构化数 据存取操作,但是经过多年的改进和完善之后,已经基本具备了所有通用数据库管理系统所 需要的相关功能。 MySQL 基本实现了 ANSI SQL 92 的大部分标准,仅有少部分并不经常被使用的部分没有 实现。比如在字段类型支持方面,另一个著名的开源数据库 PostGreSQL 支持的类型是最完 整的,而 Oracle 和其他一些商业数据库,比如 DB2、Sybase 等,较 MySQL 来说也要相对少 一些。这一点,我们可以通过 TCX 的 crash-me 测试套件所得出的测试报告得知。在事务支 持方面,虽然 MySQL 自己的存储引擎并没有提供,但是已经通过第三方插件式存储引擎 Innodb 实现了 SQL 92 标准所定义的四个事务隔离级别的全部,只是在实现的过程中每一种 的实现方式可能有一定的区别,这在当前商用数据库管理系统中都不多见。比如,大家所熟 知的大名鼎鼎的 Oracle 数据库就仅仅实现了其中的两种(Serializable 和 Read Commited), 而 PostGreSQL,同样支持四种隔离级别。 不过在可编程支持方面,MySQL 和其他数据库相比还有一定的差距,虽然最新版的 MySQL 已经开始提供一些简单的可编程支持,如开始支持 Procedure,Function,Trigger 等,但 是所支持的功能还比较有限,和其他几大商用数据库管理系统相比,还存在较大的不足。如 Oracle 有强大的 PL/SQL,SQL Server 有 T-SQL,PostGreSQL 也有功能很完善的 PL/PGSQL 的支持。 整体来说,虽然在功能方面 MySQL 数据库作为一个通用的数据库管理系统暂时还无法和 PostGreSQL 相比,但是其功能完全可以满足我们的通用商业需求,提供足够强大的服务。 而且不管是哪一种数据库在功能方面都不敢声称自己比其他任何一款商用通用数据库管理 系统都强,甚至都不敢声称能够自己拥有某一数据库产品的所有功能。因为每一款数据库管 理系统都有起自身的优势,也有起自身的限制,这只能代表每一款产品所倾向的方向不一样 而已。 1.2.2 易用性比较 从系统易用性方面来比较,每一个使用过 MySQL 的用户都能够明显地感觉出 MySQL 在这 方面与其他通用数据库管理系统之间的优势所在。尤其是相对于一些大型的商业数据库管理 系统如 Oracle、DB2 以及 Sybase 来说,对于普通用户来说,操作的难易程度明显不处于一 个级别。MySQL 一直都奉行简单易用的原则,也正是靠这一特性,吸引了大量的初级数据库 用户最终选择了 MySQL。也正是这一批又一批的初级用户,在经过了几年时间的成长之后, 很多都已经成为了高级数据库用户,而且也一直都在伴随着 MySQL 成长。 从安装方面来说,MySQL 安装包大小仅仅只有 100MB 左右,这几大商业数据库完全不在 一个数量级。安装难易程度也要比 Oracle 等商业数据库简单很多,不论是通过已经编译好 的二进制分发包还是源码编译安装,都非常简单。 再从数据库创建来比较,MySQL 仅仅只需要一个简单的 CREATE DATABASE 命令,即可 在瞬间完成建库的动作,而 Oracle 数据库与之相比,创建一个数据库简直就是一个非常庞 大的工程。当然,二者数据库的概念存在一定差别也不可否认。 1.2.3 性能比较 性能方面,一直是 MySQL 引以为自豪的一个特点。在权威的第三方评测机构多次测试较 量各种数据库 TPCC 值的过程中,MySQL 一直都有非常优异的表现,而且在其他所有商用的 通用数据库管理系统中,仅仅只有 Oracle 数据库能够与其一较高下。至于各种数据库详细 的性能数据,我这里就不便记录,大家完全可以通过网上第三方评测机构公布的数据了解具 体细节信息。 MySQL 一直以来奉行一个原则,那就是在保证足够的稳定性的前提下,尽可能的提高自 身的处理能力。也就是说,在性能和功能方面,MySQL 第一考虑的要素主要还是性能,MySQL 希望自己是一个在满足客户 99%的功能需求的前提下,花掉剩下的大部分精力来性能努力, 而不是希望自己是成为一个比其他任何数据库的功能都要强大的数据库产品。 1.2.4 可靠性 关于可靠性的比较,并没有太多详细的评测比较数据,但是从目前业界的交流中可以了 解到,几大商业厂商的数据库的可靠性肯定是没有太多值得怀疑的。但是做为开源数据库管 理系统的代表,MySQL 也有非常优异的表现,而并不是像有些人心中所怀疑的那样,因为不 是商业厂商所提供,就会不够稳定不够健壮。从当前最火的 Facebook 这样大型的网站都是 使用 MySQL 数据库,就可以看出,MySQL 在稳定可靠性方面,并不会比我们的商业厂商的产 品有太多逊色。而且排在全球前 10 位的大型
mysql性能调优与架构设计
温馨提示:如果当前文档出现乱码或未能正常浏览,请先下载原文档进行浏览。
本文档由 user 于 2021-02-28 14:56:52上传分享