使用MySQL来进行查询,当输入一条查询语句会发生什么?

​​
当我们使用MySQL作为数据库的时候,输入从客户端输入一条查询语句select * from xxx where (条件)

  • 建立连接
    首先我们是在客户端输入查询语句的,输入完查询语句以后,客户端需要将查询语句发送给服务端进行查询,这个时候就需要进行通信的连接了。当客户端和服务端建立好连接以后,会专门有一个线程处理这个客户端的交互。在连接的时候,客户端需要带上主机信息,用户名,密码等等,服务端会对其进行认证
    如果认证失败就会拒绝连接,认证成功就进行下一步操作了
  • 查询缓存
    MySQL服务端拿着文本请求,也就是查询语句,首先去缓存里面查看有没有相应的结构,如果有的话就直接返回结果,如果没有的话就进行下一步操作。
    • 对于缓存来说,只有两条完全相同的查询语句才会返回缓存的结果,如果查询语句有一点不同,那么就不会命中缓存,而是执行下一步操作。
    • 由于是缓存,所以MySQL会监控表里面的相关数据,如果在表里面有新增,删除,更新操作, 那么缓存也会被删除
  • 语法解析
    既然连接也连接好了,缓存也没有命中到,那么就需要到存储引擎去查找相应的信息了。
    在语法解析里面,要将文本请求进行解析,通过一通解析,判断sql语句的语法是否正确,然后将sql语句中的信息提取出来,要查询哪一张表,要查询哪一列,要搜索条件是什么。
  • 查询优化
    虽然我们已经写好了sql,但是在MySQL内部还是会帮助我们进行优化的,比如将外连接转为内连接等等,优化完成以后会生成一个执行计划,在计划中,我们可以看到走什么索引等等,表的连接顺序是怎么样的
  • 查询相应的存储引擎
    截止到查询优化完成时,都还没有真正的到查询数据库,最后我们需要将生成的执行计划交给我们指定的存储引擎,去查询我们想要的结果。真正的数据都是存储在存储引擎里面的,MySQL中有关数据的真正操作都时在存储引擎里面完成的。

使用MySQL来进行查询,当输入一条查询语句会发生什么?_第1张图片
我们把不涉及到操作数据的部分称作MySQL server功能,把操作数据的部分称作存储引擎功能,存储引擎有各种API供MySQL server进行调用,MySQL server只需要完成自己的任务以后调用存储引擎的API就能将相应的结果返回给客户端了

你可能感兴趣的:(MySQL的学习心得,mysql,数据库)