1、首先mysql5.7和之前版本中。
用户在服务器发送一条sql。这时在线程池中会创建一条线程去链接当前用户的sql命令。首先会查询缓存中是否有value值存在。因为在缓存中是以key-value的形成来存放上一条用户的查询结果。如果命中,则反手将value中的值返回到服务器。没有命中则走到分析器中,那么在此过程中主要分析sql要做什么。就是所谓的词法和语法分析。
何为词法分析:通俗易懂就是 当前sql中的关键字。比如select 、update 等等。
何为语法分析器:就是分析你的sql是否正确。
分析完之后就到了优化器:顾名思义在此过程中呢,主要对当前sql进行优化,比如索引等选择最优的一条执行。
执行器:排插式的引擎提供给我们选择,默认innoodb引擎,因为支持事务等,具体就不展开说说了,实现原理就是我们熟悉的B+树啦。(具体后面在说)
2、mysql5.7和之前版本和mysql8.0区别。
在8.0中去除了缓存这一操作。太。。。。。。鸡肋了。需要相当的严格。比如:
select * from user;
当我们去查询第一次时,会存入到我们缓存中,第二次查询会直接从缓存中拿取,毫无毛病!
但select * from user;这样去查询就会被判定为不是同一sql,不会命中缓存,所以就8.0就直接去掉了。大小写也会哦!