【MySql】Sql优化(一)——Sql执行流程

一、前言

      前一段时间,公司的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,就是用了解析器类似的东西。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你个佬六

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值