mysql 数据库的体系结构如下图:
1.连接器:主要负责客户端与数据库的连接
a.连接后没有任何动作,那么连接就处于空闲状态,show full processlist 进行查看
b.客户端连接数据库后会在一定时间范围内断开连接,具体时间可以进行查看
show variables like '%timeout%'
interactive_timeout:服务器关闭交互式连接前等待活动的秒数。
wait_timeout:服务器关闭非交互连接之前等待活动的秒数。
c.客户端连接数据库的连接数是有限制的,可以进行查看
show variables like '%max_connections%'
2.查询缓存:查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空,可以通过query_cache_type设置 。MySQL 8.0 版本直接将查询缓存的整块功能删掉了。
a.show variables like '%query_cache%'; //查看查询缓存是否启用,空间大小,限制等
b.show status like 'Qcache%'; //查看更详细的缓存参数,可用缓存空间,缓存块,缓存多少等
3.解析器:对客户端发送的slq语法进行解析,生成‘解析树’,并检查sql 语法是否正确合法。
4.查询优化器: 根据“解析树”生成最优的执行计划,MySQL使用很多优化策略生成最优的执行计划
5.sql 执行器:判断对表的执行有没有权限以及是否触发执行等
6.存储引擎:负责MySQL中的数据的存储和提取,是与文件打交道的子系统,它是根据MySQL提供的文件访问层抽象接口定制的一种文件访问机制,这种机制就叫作存储引擎。
查看当前数据库支持的引擎信息:show engines
InnoDB和MyISAM是使用MySQL时最常用的两种引擎类型,区别如下:
a.事务和外键 InnoDB支持事务和外键,具有安全性和完整性,适合大量insert或update操作 MyISAM不支持事务和外键,它提供高速存储和检索,适合大量的select查询操作
b.锁机制 InnoDB支持行级锁,锁定指定记录。基于索引来加锁实现。 MyISAM支持表级锁,锁定整张表。
c.索引结构 InnoDB使用聚集索引(聚簇索引),索引和记录在一起存储,既缓存索引,也缓存记录。 MyISAM使用非聚集索引(非聚簇索引),索引和记录分开。 并发处理能力 MyISAM使用表锁,会导致写操作并发率低,读之间并不阻塞,读写阻塞。 InnoDB读写阻塞可以与隔离级别有关,可以采用多版本并发控制(MVCC)来支持高并发
d.存储文件 InnoDB表对应两个文件,一个.frm表结构文件,一个.ibd数据文件。InnoDB表最大支持64TB; MyISAM表对应三个文件,一个.frm表结构文件,一个MYD表数据文件,一个.MYI索引文件。从MySQL5.0开始默认限制是256TB。
适用场景: MyISAM
不需要事务支持(不支持)
并发相对较低(锁定机制问题)
数据修改相对较少,以读为主
数据一致性要求不高
InnoDB
需要事务支持(具有较好的事务特性)
行级锁定对高并发有很好的适应能力
数据更新较为频繁的场景
数据一致性要求较高
硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,减少磁盘IO