当前位置:   article > 正文

一条sql发送给mysql后,内部是如何执行的?(说一下 MySQL 执行一条查询语句的内部执行过程?)_本篇文章会分析下—个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎

本篇文章会分析下—个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎

1、mysql在接受到一条查询时,如果开启了查询缓存,会先从查询缓存里取,没有的话进入下一步
2、进入解析阶段,解析器会通过关键字将sql解析成一颗解析树,这里会进行词法和语法的解析。之后预处理器会将解析树进一步分析,检查数据表和列是否存在,最后预解析器会生产一颗新的解析树,并将解析结果传给执行优化器。
3、执行优化器会将解析树转换成一个执行计划,这里会对语句做一些优化,比如子查询转换成连接查询。这个执行计划里会声明用哪些索引,,可以使用explain查看。
4、最后执行器会将执行计划,传给存储引擎进行操作,生成结果。

如果一张表创建了多个索引,在哪个阶段或模块进行的索引选择?

查询优化器,优化器阶段Optimizer

MySQL 存储引擎架构了解吗?

在这里插入图片描述
主要分为内存结构和磁盘结构
内存结构:主要有缓存池(buffer pool),写缓冲,自适应哈希索引,日志缓冲区
缓存池:以页为单位,使用最近最少使用,保存表数据和索引数据
写缓冲:5.5之前叫插入缓冲,只针对插入,之后对删除和修改都优化了,
对于不在缓存池里的辅助索引,会将辅助索引的改变先存在修改缓存里,当辅助索引被从磁盘查出时此时会将这个修改合并到缓存池中。降低磁盘的IO
其他:主键索引一般都是顺序写入,不需要磁盘的随机读取,写速度是非常快的,所以不需要写缓冲。

自适应哈希索引:在缓存池的B+树上再做一个缓存,指向缓存池B+树的叶子节点。自动建立的。

日志缓存区:用于保存到要写入到磁盘的日志的缓存区,定期刷新到磁盘,

磁盘结构:表空间和redo log
redo log :log buffer写到磁盘的内容

表空间:系统表空间、临时表空间、常规表空间、undo表空间、等等。
系统表空间:Innodb数据字典、双写缓冲区、修改缓存、undo日志

MyISAM 和 InnoDB 的区别是什么?
如果全是高频的读操作,可以用myisam,其他全部用innodb

区别:myisam不支持事务、外键、修改/插入时只能表锁
innodb:支持事务、外键、行锁。更适合高并发

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/827322
推荐阅读
相关标签
  

闽ICP备14008679号