MySQL体系结构
数据库永远分为俩层去看:CPU+内存,硬盘
用户请求过来后,会先通过Commander Dispatcher找到Query Cache Module(缓冲)进行查看
Query Cache Module
同样的查询,第一条查询,会把从磁盘中查出来的数据缓冲到数据库的内存中,等在一个同样的查询来到时候就直接访问内存(内存读比磁盘读要快的多)
磁盘io(意为磁盘数据输入输出) 当使用update语句时候,如果只修改一条语句,也会触发mysql的一种机制,让他去在查询一次磁盘,这样更加消耗性能,所以一些公司关掉了此缓冲功能。
注意:mysql8.0以后这个功能被干掉了
当Query Cache Module没有查到时候,他会找到Parser
从此开始也是SQL的语句执行步骤
Parser(解析)
Parser,又称解析,去知道在哪里能找到对应的表,从而取到相应的数据
解析---》执行计划
核心层(mysqld)(基于CPU和内存):解析sql语句,生成合理的执行计划,然后取数据‘
存储引擎层:
存储引擎InnoDB(MySQL5.5之后默认的引擎为InnoDB),是按照主键索引来放置的数据,所以每个主键索引 都是一条数据,当找到主键索引后,无需再去进行数据定位即可获取到对应的数据。(注:如果创建一个InnoDB类 型的表,他没有主键,它自动就会用第一个非空且唯一的列,会建立隐藏列(6字节),以隐藏列为主键)
存储引擎MyISAM,典型的堆表,存一条数据就放进去,再来一条就在塞进去,是按照数据存储顺序存放的。 获取数据时候,比如通过索引找到对应的id后再通过id到表里进行数据定位,比InnoDB要麻烦一步。但是他的辅助索 引更好一些,因为他是直接通过辅助索引就可以查到对应的数据,但是InnoDB得由主键再去进行主键索引查询才能 获取到数据。
至于走那个引擎,需要判断后进行选择,之后进行后续的sql语句执行流程。
SQL语句的执行流程(图画分析)
MySQL内部解析
查询出来的数据会先从磁盘(emp)拿出来放于MySQL内部的innodb buffer pool内存里,之后后续相同的查询会直接从pool里面进行查找,这样会使速度更快避免一直访问磁盘。放于内存后,它会去用户私密的区域soft buffer去进行排序(有order才在这里排序),之后进行数据获取。
log buffer(日志先行),不管什么操作都会先在日志进行记录之后才会有真正的操作。此举是为了防止数据库宕机而设置的,日志会进行“落盘”,而“落盘”是通过readdo日志把logbuffer的日志刷到磁盘中的。
注意:
1、MySQL是一个单进程多线程的服务器,进而处理高并发
2、idle类型(会话)的线程mysql多少都可以承受,active类型的线程(会话)当达到125个的时候就会使数据库危险了
个性签名:一个人在年轻的时候浪费自己的才华与天赋是一件非常可惜的事情
如果觉得这篇文章对你有小小的帮助的话,记得在左下角点个“”哦,博主在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ⁾⁾!