一、应用系统如何与mysql进行一次交互?
最开始接触jdbc的时候,我们系统如何完成一次sql操作呢?第一步,建立数据库连接;第二步,操作sql;第三步,释放连接。
但是每次建立与数据库的连接非常耗时和资源,所以我们加入了连接池的概念。第一步的获取连接是从连接池中获取一个可用的连接,第三步的释放连接不是断开连接,而是将连接放回连接池中。
但是mysql是如何处理我们每次提交的sql呢?以前这对于我就是一个黑盒,只知道操作mysql给我的结果就好了,但是有问题时又无法分析出问题在哪一步。今天就开始深入研究一下mysql,而不只是简简单单的curd了。
二、mysql是什么
首先,mysql是什么?其实它也就是一个系统,和我们其他的业务系统一样,由一行行代码组成的。我们自己的系统与mysql交互,就是通过http的一次接口调用而已,有建立连接的接口,有查询的接口等等。
mysql和我们其他系统一样也维护了一个线程池,其他业务系统用来获取连接。mysql有一个监听线程,一直在监听有什么新的连接请求过来。一旦有请求过来,就调用sql接口进行操作。
三、一次SQL操作的流程
那么一次SQL操作的流程是如何的呢?
比如 select id,name from user where id=1:
1.SQL解析器解析sql。这条sql就会解析成这是一个select查询操作,操作的表名user,查询的字段id,name。
2.SQL优化器优化sql。sql解析出来后,该按照什么样的步骤去操作呢?是全表扫描后过滤出id=1的那条呢,还是根据id=1指定定位到那一条,把那条数据查询出来呢。显然,是后面这种方法更优化。
3.SQL执行器执行计划。如何执行sql的,就是要靠SQL执行器了。
4.调用存储引擎接口执行sql。存储引擎操作存放在内存或磁盘的数据,进而返回我们需要的结果。mysql的存储引擎有innodb,myisam等,现在用的最多的就是innodb了。