mysql的执行原理:
1.用户登录,
相应的会识别到用户不同的数据库操作权限,
2.查询数据的时候,
会去缓存区查找是否存在数据,(缓存区存储的数据格式是:key value的形式存储数据的)
3.缓存区没有数据的时候,就到词法分析器
分析你的词法语法,增删改查,insert,delete,update,select,是否正确
(1)首先会分析你的词法对不:
比如 select * from user :就会提示在mysql的词法里面找不到这个词,提示错误
(2)再会分析你的语法对不
4.优化器的执行情况:
比如你的关联查询,left join ,inner join ,或者触发器
执行器算法:
考虑先查a表还是先查b表,查a是否有索引,查b是否有索引,
检索先查a表结果作为条件,再查b高效。还是先查b表结果,作为条件再查a表高效
5.执行器:
执行器会调用MySQL的数据库引擎,调用引擎接口获取查询结果
调用存储引擎,innodb,去查磁盘上的数据库文件,然后去文件里面一条一条的查找数据
找到结果集之后,会返回给执行器,执行器会校验是否开启缓存,如果开启缓存的话,会查对应的查询语句是否已经存在缓存,如果没有的话就,将该查询语句,以及结果存入到缓存中去,key(该查询语句) value的形式查询数据。第二次同样的select语句,进来的时候,查到该查询语在缓存中已经存在key,那就直接去缓存中,查数据,不再去磁盘中查询数据。(去磁盘读取数据是非常耗性能的)
缓存的使用场景:读多写少,几乎不写的场景才使用缓存。
查询缓存是否开启:
my.cnf中的query_cache_type参数:
0:关闭缓存
1:无条件缓存,查询什么数据都先存入缓存
2:有条件缓存,按需使用
比如:需要缓存test表的数据,就将query_cache_type设置为2,