zoukankan      html  css  js  c++  java
  • 初识mysql架构设计

    一、应用系统如何与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了。

          

      

  • 相关阅读:
    vue2.0 keep-alive最佳实践
    Vue解决安卓4.4不兼容的问题
    体验异步的终极解决方案-ES7的Async/Await
    axios在vue中的简单配置与使用
    AngularJS-UI-Router
    SignalR 填坑记
    小心C# 5.0 中的await and async模式造成的死锁
    使用BCP导出导入数据
    关闭正在执行的事务 Kill
    C# 正则表达式
  • 原文地址:https://www.cnblogs.com/ITyannic/p/12233473.html
Copyright © 2011-2022 走看看