深入学习MySQL 01 一条查询语句的执行过程

作者: KenDoEverything | 来源:发表于2019-04-18 16:22 被阅读2次

    在学习SpringCloud的同时,也在深入学习MySq中,听着<mysql45讲>,,看着<高性能MySQL>,本系列文章是本人学习过程的总结,水平有限,仅供参考,若有不对之处或有啥建议都可与我联系,感谢!</mysql45讲>

    在学习一个东西之前,了解它的历史都是很有必要的,那么首先,我们先来了解MySQL的历史。

    MySQL的前世今生

    1.1990年,有一个小伙子被客户要求提供通用的SQL支持,当时他首先借助了mSQL的代码进行集成,但效果不太满意,便自己重写了一个SQL支持。

    2.1995年,1.0版的MySQL发布,内部引擎为ISAM。

    3.1999年,MySQL AB公司成立,并开发出Berkeley DB引擎,BDB引擎支持事务,这是MySql第一个支持事务的引擎。

    4.2000年,MySQL开源,重新整理存储引擎ISAM,重命名MyISAM。

    5.2001年,集成了存储引擎InnoDB,这个引擎不仅能持事务处理,并且支持行级锁。后来该引擎被证明是最为成功的MySQL事务存储引擎。

    6.2006年,Oracle把InnoDB引擎的开发公司innobase收购完成。MySQL明确地表现出迈向高性能数据库的发展步伐。

    7.2008年,Sun公司以10亿收购了MySQL AB。

    8.螳螂捕蝉,黄雀在后。2009年,数据库老大Oracle大笔一挥,74亿美将Sun和MySQL通盘收于旗下,从此MySQL数据库进入Oracle时代。

    9.2010年,MySQL 5.5正式版发布,Oracle完成了大量改进,并将innodb改成默认引擎。

    10.由于MySQL的开源性被广泛传播,也被更多的人了解。伴随着更多的技术开发人员加入到MySQL开发中,从此它被不断完善,一步一步迈向人生巅峰。

    11.历史只需要了解,不需要背诵哈~

    MySQL逻辑架构

    MySQL逻辑架构图(源自<MySQL45讲>)

    大体上,MySQL分为Server层和存储引擎层。

    Server层包括连接器、查询缓存、分析器、优化器、执行器等。这一层提供了一些核心公用服务,包括了内置函数、视图、触发器等功能。

    存储引擎层主要是提供数据存储与提取服务,它是插件式的,支持MyISAM、InnoDB、Memory等。MySQL5.5起,默认使用InnoDB

    查询语句的执行过程

    sql语句:select * from T where ID = 1

    1.连接器
    首先需要经过连接器,建立与MySQL的连接,在这里会做身份认证(验证账号密码)、权限读取(获取你的相关权限,用于做权限的逻辑判断),而且这会有个线程池用于管理线程

    2.查询缓存
    验证身份通过后,会在查询缓存中查询找有没有缓存,命中的话就直接返回结果,否则进入分析器。查询缓存是以键值对的形式保存缓存的,key存储sql语句,value存储查询结果。

    ps:建议关闭查询缓存。因为当表的更新时,相应表的查询缓存会被全部清空,这会导致缓存的命中率很低,维护查询缓存也会消耗一定的性能

    3.分析器
    首先进行"词法分析",从你输入的SQL中识别出"select"则认为这是查询语句,还会识别出"T"为表名,"ID"为列名等等

    然后进行"语法分析",判断整个sql语句是否错误,并判断是否存在"T"表,是否存在列"ID"
    4.优化器
    在这会对SQL语句进行优化,比如索引的选取,多表关联(join)时连接表的顺序等,然后选取最优的方案生成执行计划

    ps:优化器有时也会有出错,比如选错索引

    5.执行器
    首先判断该用户有无对该表查询的权限,无则直接返回,有则根据执行计划执行SQL语句。
    执行完成后,将结果缓存到查询缓存中,并返回结果给客户端。

    至此,一条查询语句执行完了

    参考 《MySQL45讲》

    《高性能MySQL》
    https://www.cnblogs.com/eyesfree/p/7232559.html

    如果觉得不错,分享给你的朋友!

    image image

    THANDKS

    • End -

    一个立志成大腿而每天努力奋斗的年轻人

    伴学习伴成长,成长之路你并不孤单!

    扫描二维码,关注公众号

    相关文章

      网友评论

        本文标题:深入学习MySQL 01 一条查询语句的执行过程

        本文链接:https://www.haomeiwen.com/subject/uwetgqtx.html