一、前言
前一段时间,公司的DBA离职了,这可怎么办呢,临危受命当起了DBA。当然也收到了一部分数据库设计文档,数据库ER图等。但是在后面的开发中,数据库也是随着需求修改,到下面的时候,需要进行SQL优化了,对项目开发人员的SQL进行优化。
二、MySQL
小编项目中用到的是Mysql。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
三、Sql执行流程
大家先来看一下下面这张有点AV画质的图片:
上面的图,就是我们的Sql 执行的过程:
1. 客户端发送一条查询给服务器;
2. 服务器通过权限检查之后(用户名和密码等),先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段;
3. 服务器端进行SQL解析、预处理,再由优化器根据该SQL所涉及到的数据表的统计信息进行计算,生成对应的执行计划;
4. MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询;
5. 将结果返回给客户端。
SQL执行的最大瓶颈在于磁盘的IO,即数据的读取;不同SQL的写法,会造成不同的执行计划的执行,而不同的执行计划在IO的上面临完全不一样的数量级,从而造成性能的差距;所以,我们说,优化SQL,其实就是让查询优化器根据程序猿的计划选择匹配的执行计划,来减少查询中产生的IO;
名称介绍
【解析器】:检测SQL语法解析是否有错误,解析成为解析树(没有优化的树)
在Hibernate中,的antlr的jar包中,专门作为语法解析的。用于识别自己定义的语言,比如HQL。
Hibernate中有自己定的HQL(Hibernate Query Language)
HQL(Hibernate Query Language)是Hibernate提供的一种面向对象的查询语言,HQL提供了更加丰富灵活的特性、强大的查询能力,HQL提供了更接近传统的SQL语句的查询语法。
【预处理器】
对解析树进行预处理:常量排到什么地方;有计算的地方,把计算得到结果;
得到更加规范的树
【查询优化器】
最关键,任何sql,从多种查询方案中,根据mysql自身的统计信息,选择一种最优的
sql优化,就是要使得mysql的查询优化器按照程序员的思路去优化。
【查询执行计划】
执行步骤,第一步干什么,第二步干什么
【查询执行引擎】
Mysql的执行引擎是多种多样的,InnoDB,MyISM,memory,数据库用的什么引擎,就用什么引擎执行。
四、小结
通过对这个sql执行的过程学习,更加熟练了自己对sql的使用。举一个例子,我们都知道阿里的druid解析器可以解析SQL,就是用了解析器类似的东西。