赞
踩
1、mysql在接受到一条查询时,如果开启了查询缓存,会先从查询缓存里取,没有的话进入下一步
2、进入解析阶段,解析器会通过关键字将sql解析成一颗解析树,这里会进行词法和语法的解析。之后预处理器会将解析树进一步分析,检查数据表和列是否存在,最后预解析器会生产一颗新的解析树,并将解析结果传给执行优化器。
3、执行优化器会将解析树转换成一个执行计划,这里会对语句做一些优化,比如子查询转换成连接查询。这个执行计划里会声明用哪些索引,,可以使用explain查看。
4、最后执行器会将执行计划,传给存储引擎进行操作,生成结果。
查询优化器,优化器阶段Optimizer
主要分为内存结构和磁盘结构
内存结构:主要有缓存池(buffer pool),写缓冲,自适应哈希索引,日志缓冲区
缓存池:以页为单位,使用最近最少使用,保存表数据和索引数据
写缓冲:5.5之前叫插入缓冲,只针对插入,之后对删除和修改都优化了,
对于不在缓存池里的辅助索引,会将辅助索引的改变先存在修改缓存里,当辅助索引被从磁盘查出时此时会将这个修改合并到缓存池中。降低磁盘的IO
其他:主键索引一般都是顺序写入,不需要磁盘的随机读取,写速度是非常快的,所以不需要写缓冲。
自适应哈希索引:在缓存池的B+树上再做一个缓存,指向缓存池B+树的叶子节点。自动建立的。
日志缓存区:用于保存到要写入到磁盘的日志的缓存区,定期刷新到磁盘,
磁盘结构:表空间和redo log
redo log :log buffer写到磁盘的内容
表空间:系统表空间、临时表空间、常规表空间、undo表空间、等等。
系统表空间:Innodb数据字典、双写缓冲区、修改缓存、undo日志
MyISAM 和 InnoDB 的区别是什么?
如果全是高频的读操作,可以用myisam,其他全部用innodb
区别:myisam不支持事务、外键、修改/插入时只能表锁
innodb:支持事务、外键、行锁。更适合高并发
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。