查询缓存
MySql执行过的语句可能会将其以key-value的形式存入缓存中,key是执行的sql语句,value是执行结果。MySql在拿到一个查询请求后会先到缓存中查找,如果能够找到key,那么将直接把key对应的value返回给客户端,如果没有找到,则执行后面的操作,最后,sql执行完成后,执行结果会以key-value的形式存入缓存中。如果查询能够命中缓存,那将不会再进行后续的操作,此时效率还是挺高的。
但是,
MySQL 8.0版本中直接将查询缓存整块功能干掉了,8.0开始就没有这个功能了
。因为加入你对一个表做了更新操作,那么这个表上的所有查询缓存都将被清空。对于不经常更新的表,比如系统配置表,使用缓存还是可以的,但是
查询缓存失效的
场景在实际业务中还是非常频繁的,可能官方也认为该功能的实际应用场景不多,所以删除掉了。
分析器
如果没有命中缓存,就会往下走,这时就要开始真正执行语句了。首先就是进入分析器,分析器有
词法分析
和
语法分析
,主要是对sql语句进行解释,让MySql知道这条语句是要做什么。
词法分析:
一条sql是由多个字符串和空格组成的,MySql需要识别出里面的字符串分别是什么,代表什么,比如一条查询语句,提取关键字select,提取查询的表名、字段名,提取查询条件条件等等。做完这些后,就要进行语法分析。
语法分析:
语法分析主要是判断主要是来判断这条sql是否正确,是否符合MySql语法,比如select * from 写成selec * from ,MySQL就会抛出“You have an error in your SQL syntax”异常。