Mysql设计原理栏目总结
1.MySQL逻辑架构图
(1)Server层:包括图中XX,以及所有内置函数和所有跨存储引擎功能,比如存储过程、触发器、视图等。
(2)存储引擎:负责数据存储与提取,支持InnoDB(5.5.5后默认)、MyISAM、Memory等存储引擎。
注意:在create table时使用engine=memory可以指定引擎,且不同存储器共有同一Server层。
(1)连接器:负责建立连接(TCP三次握手)、获取权限(用户已连接不受管理员权限修改,只有重新连接生效)。(建议不要再-p后直接拼接密码,以免泄露)
①长连接:连接后可以持续在请求使用同一连接,但容易积累内存(查询缓存变大)。应定期断开长连接,或重置(mysql_reset_connection)恢复刚连接状态。
②短连接:执行完几次查询后就断开。
(2)查询缓存(8.0废除):执行过的语句和结果会以key-value形式存在,但更新表后就失效了。
(3)分析器:
①Token词法分析:识别关键字、判断字符串为表名还是列名。
②Semantic语法分析:是否满足SQL语法规则。
(4)优化器:表中有多个索引时决定使用哪个,或一个语句有多表关联(join)时,决定各表顺序。
(5)执行器:先判断权限,再打开表,调用对应引擎接口执行。
2.整体逻辑架构图
3.常见引擎:MyISAM与Innodb区别
(1)事务支持不同:
-
MyISAM不支持
-
Innodb支持
(2)锁不同:
-
MyISAM表锁:冲突大性能差,比如表有100万用户数据,而同时只能有一个线程查数据
-
Innodb行锁:锁在了行上
(3)物理文件不同: