对于测试行业的小伙伴来说,看到“select * from table where ...”应该再熟悉不过了,那么是否明白这个语句到底是怎么执行的呢?
首先要明白这个语句是由客户端向服务器发送的,那么服务器中是由负载均衡(Nginx)接收后分配给到了Tomcat,其次Tomcat才会从mysql中捞取数据
下面说下mysql中到底是怎么的运行规则,上图:
通过这个图大家应该可以看出基本的步骤了,下面详细说下
1、客户端发起一个查询请求后会经过连接器和mysql进行连接
2、查询缓存,如果在缓存中查找到了数据那么就会直接返回,如果没有查询到,那么就会到解析器,这里说明下缓存中的数据,只要表一更新,那么缓存中的数据就会清空
3、解析器会对这条sql语句进行解析,判断是否有语句错误,如果错误则返回错误,如果正就到优化器
4、经过了解析器之后,mysql就知道你想要怎么做了,那么就会到优化器中进行优化,具体怎么执行才会更加高效,比如表中有哪些索引,应该怎么用这些索引,多表连接查询的表顺序等
5、通过优化器之后,就会到执行器,执行器就会检查权限,如果权限不通过则会返回对应错误,其次会想搜索引擎索要数据,返回的数据如果设置的缓存那么就会放到缓存中
以上就是整个的搜索过程了,欢迎各位同行指正