美文网首页
sql执行过程

sql执行过程

作者: dingking | 来源:发表于2020-10-28 08:42 被阅读0次
    image.png

    执行过程

    Mysql一般可以分为server层 存储引擎层。如下sql:

    select * from test where id=1;
    

    连接器

    客户端进行登录连接,权限判断(如果修改了该用户权限,会在之后的连接生效,原先的链接不生效)
    连接成功可以使用下列sql查看连接进程

    show processlist;
    

    在连接器长时间休眠,没有动静,连接器会主动端口,下次发起请求会出现(Lost connection to MySQL server during query),默认连接时间是8小时,控制参数是由参数 wait_timeout 控制的。
    像我们一般开发后端都是保持连接,使用长连接,但是很多长连接可能发现mysql内存涨的很快,一直高位不下,

    1. 这时候要查看那个连接使用过段,进行重新初始化连接
    2. 使用MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection

    查询缓存

    查询缓存通过key(查询sql),value查询结果保存,如果查询不到则进入分析器后续操作。
    在进行表更新时候,都会清空该表的缓存,如果更新频繁,缓存的命中率比较低,所以很多时候不建议开启缓存,不开启缓存可以将参数 query_cache_type 设置成 DEMAND,而mysql 8以后这块已经删除了。

    分析器

    进行sql的分析,分析语法是否合理,比如是否缺字段,进行什么操作,上面是‘select’说明是查询操作,还有可以分析表中是否含有某个字段,比如没有某个字段a,会在这里体现。

    优化器

    进行选择走哪个索引,连接查询的时候那个表先查询,以及查询的逻辑是怎么样。

    执行器

    判断是否有该表权限,进行调用存储引擎查询数据。结果回写缓存(一般不启用)

    1. 引擎扫描行数 执行器调用的次数
    2. rows_examined(慢sql查看) 执行sql过程是扫描数据行数总和

    存储引擎

    比如mysql 默认的myisam,以及现在默认用的innodb

    相关文章

      网友评论

          本文标题:sql执行过程

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