MySQL是目前市场是非常流行的关系型数据库,很多企业都使用MySQL作为服务器数据库。
MySQL数据库的特点
MySQL数据库是一款开源的关系型数据库,性能突出。
MySQL支持多种存储引擎,可以自由选择。
MySQL支持事务和数据恢复(依赖存储引擎)。
MySQL数据库的架构
MySQL的客户端
MySQL数据库是一个C/S架构的数据库,其中MySQL的服务端只有一个,但是客户端可以有多个,比如使用Java,Python等语言操作数据库,那么这些语言所编写的程序,就算是一个MySQL数据库的客户端,除此之外,比如Windows系统下的cmd命令提示窗口,也可以算是一种客户端。
MySQL的服务器端
MySQL的服务器端是重点,是MySQL数据库能够保存大量数据的原因,我们首先来看一看MySQL服务器端的各个组件以及组件的作用。
连接管理: 这是MySQL数据库的客户端和服务器端建立连接的一个管理工具,客户端通过IP地址,端口号,用户名和密码等信息连接MySQL数据库,然后由数据库的连接管理工具进行连接验证,确认用户名和密码的权限,是否能够访问数据库,能够访问哪些数据库。
缓存查询: MySQL为了优化访问数据的效率,会将一些SQL查询的数据放入缓存中,当有其他SELECT语句的SQL查询数据库的时候,会先查看缓存中是否有对应数据,如果有则直接返回,没有才会去解析SQL。但是因为缓存命中需要满足很多条件,比如SQL相同,上下文环境相同等等,导致MySQL的缓存命中率非常低下,所以在MySQL8.0的版本中,已经将缓存查询移除了。
解析器: MySQL的解析器的作用是用来解析SQL语句的,分析SQL语句的语法和语义。
优化器: MySQL的优化器,顾名思义,就是用来优化SQL的执行效率的,MySQL的优化器,可以分析SQL使用哪种方式执行效率最高,比如查询语句是使用全盘扫描的方式还是索引查询,MySQL的优化器是决定SQL执行性能的关键组件。不过优化器也并不是万能的,因为优化器判断使用哪种执行方式,使用的是基于数据库数据的抽样统计分析,抽样统计分析有时候可能会导致数据具有倾向性,从而导致优化器使用了错误的执行方法。
MySQL的逻辑架构
MySQL的架构分为三层,分别是客户端,服务器层,存储引擎层。
MySQL的SQL执行流程
一条SQL通过连接管理工具的权限验证之后,会首先使用MySQL的缓存查询,如果缓存命中,直接返回SQL执行结果,如果缓存未命中,则由SQL解析器进行SQL语法语义解析。MySQL8.0由于缓存命中率太低,已经移除了缓存查询这一组件。
SQL通过解析器解析了语法和语义之后,将解析出来的内容交给MySQL优化器,由MySQL优化器做进一步的优化分析。
最终MySQL将优化器分析出来的结果交给MySQL的存储引擎执行。
MySQL的存储引擎
MySQL的存储引擎是对底层物理数据执行实际操作的组件,为服务器层提供各种操作数据的 API。MySQL 支持插件式的存储引擎,包括 InnoDB、MyISAM、Memory 等等。
插件式存储引擎是 MySQL 的一大特点体系结构,每个存储引擎都提供了各自的功能,用户可以根据业务或者应用场景为数据表选择不同的存储引擎。也就是说,存储引擎的设置是在表级别的;因此也被称为表类型(table type).
InnoDB
MySQL数据库在5.5的版本之后,默认使用InnoDB存储引擎。
InnoDB存储引擎是一个支持事务,支持表级锁和行级锁,支持高并发的存储引擎。
InnoDB是事务安全型的存储引擎,可以保证数据安全,更加注重数据的完整性和安全性。
InnoDB存储引擎,在插入数据的时候,会按照主键顺序进行排序,所以插入数据的效率较低一些。
InnoDB在5.6版本之后支持全文检索功能。
MyISAM
在MySQL5.5之前的版本,默认使用的存储引擎都是MyISAM,后来因为InnoDB的功能和性能逐渐完善和强大,才被InnoDB取代。
MyISAM不支持事务,也不支持行级锁,只支持表级锁,不支持高并发。
MyISAM擅长高速读写,在插入数据的时候不进行排序,所以插入数据的速度优于InnoDB。
MyISAM支持数据压缩,但是数据压缩之后表变为只读表,只允许读操作,如果要进行写操作,需要解压数据。
MyISAM支持全文检索功能。
InnoDB和MyISAM的区别
InnoDB
MyISAM事务
支持事务
不支持事务
全文检索
5.6之后支持
支持
锁粒度
支持表级锁,行级锁
支持表级锁,不支持行级锁
高并发
支持
不支持
效率
更新、删除快,插入较慢
高速插入和查找
数据安全
注重数据完整性、安全性
较差