由于工作的缘故,笔者的大部分时间需要与开发人员进行数据库方面的沟通,并对他们进行培训。不论他们是DBA,还是开发人员,似乎都对MySQL的体系结构了解得不够透彻。很多人喜欢把MySQL与他们以前使用的SQL Server、Oracle、DB2作比较。因此笔者常常会听到这样的疑问:?为什么MySQL不支持全文索引??MySQL速度快是因为它不支持事务吗??数据量大于1000万时MySQL的性能会急剧下降吗?……对于MySQL数据库的疑问有很多很多,在解释这些问题之前,笔者认为不管对于使用哪种数据库的开发人员,了解数据库的体系结构都是最为重要的内容。在给出体系结构图之前,用户应该理解了前一节提出的两个概念:数据库和数据库实例。很多人会把这两个概念混淆,即MySQL是数据库,MySQL也是数据库实例。这样来理解Oracle和Microsoft SQL Server数据库可能是正确的,但是这会给以后理解MySQL体系结构中的存储引擎带来问题。从概念上来说,数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,包括数据库定义、数据查询、数据维护、数据库运行控制等都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。如果这样讲解后读者还是不明白,那这里再换一种更为直白的方式来解释:数据库是由一个个文件组成(一般来说都是二进制的文件)的,要对这些文件执行诸如SELECT、INSERT、UPDATE和DELETE之类的数据库操作是不能通过简单的操作文件来更改数据库的内容,需要通过数据库实例来完成对数据库的操作。所以,用户把Oracle、SQL Server、MySQL简单地理解成数据库可能是有失偏颇的,虽然在实际使用中并不会这么强调两者之间的区别。好了,在给出上述这些复杂枯燥的定义后,现在可以来看看MySQL数据库的体系结构了,其结构如图1-1所示(摘自MySQL官方手册)。
从图1-1可以发现,MySQL由以下几部分组成:?连接池组件?管理服务和工具组件?SQL接口组件?查询分析器组件?优化器组件?缓冲(Cache)组件?插件式存储引擎?物理文件从图1-1还可以发现,MySQL数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者可以按照自己的意愿来进行开发。需要特别注意的是,存储引擎是基于表的,而不是数据库。此外,要牢记图1-1的MySQL体系结构,它对于以后深入理解MySQL数据库会有极大的帮助。
相关资源:MySQL技术内幕 InnoDB存储引擎.pdf