赞
踩
关于InnoDB书籍接近尾声,这是才慢慢发现并没有把体系架构弄明白,以及之前的文章中多次提到的Sever没弄得太明白是怎么回事。
仅作为笔记
根据上图可以看到,连接器以客户端为输入端,输出端有分析器和查询缓存,连接器负责跟客户端建立连接(使用的是TCP)、验证身份、获取权限、维持和管理连接,在交互式页面使用如下命令可以连接:
mysql -h -p -u -p
注意:连接后如果不进行任何操作,这个连接会处于空闲状态,默认空闲状态8h自动退出,由 wait_timeout 控制的。
连接器的输出端之一,在连接操作之后进行,在进行查询请求前会先到查询缓存看看,之前是不是执行过这条语句,执行过的语句及其结果可能会以 key-value 的形式被缓存在内存中, key 是查询的语句,value 是查询的结果,如果能够在缓存中找到key,则直接返回结果给客户端。
注意:查询缓存以来的是缓存,而只要表有更新那么内存上的缓存页一定会更行,那么会导致依赖缓存的查询名字率降低,很影响系统性能。所以这个只适合在只使用查询功能的情况。
发生在没有命中到查询缓存之后。对 SQL 进行 “词法分析”和 “语法分析”,根据 “词法分析” 的结果,分析器会根据语法规则,判断输入的 SQL 是否满足 MySQL 语法。如果存在语法错误,就会收到 ERROR 的提示信息,总之是一个检查SQL语句本身有没有语法错误的地方。
既然SQL语句本身没有错误,那么意味着可执行,优化器的功能就是在可执行的条件下找最好的执行方法(最快),比如表中有多个索引的时候,决定使用哪个索引,或者在一个语句中有多表关联时,决定各个表的执行顺序。总之优化器是给一句SQL语句选择最优执行方法的。
万事俱备只欠东风,最优方法也找好了那就是执行了。
执行器执行顺序:
1)调用存储引擎接口取当前表的第一行,判断是否符合 SQL 中的条件判断,如果不是则跳过,如果是则加入到结果集中
2)再取下一行,重复步骤1)中的判断逻辑,直到遍历完整个表
3)执行器将上述遍历过程中查找符合条件的结果集返回给客户端
也就是前几章的内容,常用的有InnoDB、MyISAM,这两个挺重要的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。