本文是我在大半年前在前公司做团队分享时的一个文档,写得比较挫,当时分享讲了2个小时,自己感觉讲得还可以。最近前同事跑来问我还有没有文档保存,翻了旧电脑和硬盘才找出来,于是就想着分享一下。
一、MySQL整体结构
-
服务器层(负责客户端连接、授权认证、安全、线程管理等)
-
核心层(缓存查询、解析器、查询优化器、函数)(存储过程,触发器,视图)
-
存储引擎层(MyISAM、InnoDB、Memory、Merge,负责数据的存储和提取)
数据库的全球排名情况
https://db-engines.com/en/ranking
本次讲的大多是INNODB
mysql太多内容可讲,每个点都一次分享都讲不完。
没有理解内核实现时的无法知道mysql怎么工作,只知道存储。
带大家从外而内看透MySQL。
这个整体结构类似于springMvc中的controller service dao
- Connectors:不同语言中与 SQL 的交互
- Management Serveices & Utilities:系统管理和控制工具
- Connection Pool:连接池
- SQL Interface:SQL 接口(提供给存储引擎层,类似于面向接口编程,SPI等)
- Parser:解析器
- Optimizer:查询优化器
- Cache 和 Buffer:查询缓存
- Engine:存储引擎
MyISAM和INNODB的区别
1、Innodb最大的特点: 支持事务处理与外键和行级锁
2、索引实现方式不同,MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少InnoDB 中不保存表的具体行数,也就是说,执行select count() from table
3、对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引
4、DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
5、InnoDB 中不保存表的具体行数,也就是说,执行select count() from table
关于MyISAM和InnoDB的其他相关
1、读多写少的,MyISAM的读性能是比Innodb强不少
2、MySQL 4.0以上 myisam引擎就支持了full text search 全文搜索
3、mysql版本号已经大于5.6.4了也就支持了innodb的全文搜索
一条查询语句的执行过程
