1、mysql可分为server层和存储引擎
1.1 server层:
衔接器、查询缓存、剖析器、优化器 、履行器、包括所有内置函数(日期,时光,数学、加密函数),所有跨存储引擎的功效都在此层,比如存储进程、触发器、视图等
1.1.1 衔接器:
负责跟客户端树立衔接、获得权限、保持和管理衔接
mysql -h$host -P$port -u$user -p$password
备注:
a、sleep状况是衔接完成,但没有后续操作,此衔接就会处于空闲状况;
b、如果在衔接进程中对当前用户的权限做了修正,也须要在断开重新衔接以后此权限才生效;
c、长衔接与短衔接:长衔接应用过量会涌现mysql内存占用太高致使mysql异常重启的情形,解决办法可以是:定期断开长衔接,5.7及以上,则可以通过mysql_reset_connection来重新初始化衔接缓存,这个进程不会重连和重新做权限验证,但会恢复到刚刚创立完的状况;
1.1.2 查询缓存:
a. 树立衔接以后便会去查询缓存,缓存会以key-value对的情势保留,key是查询语句,value是查询成果。若查询命中缓存,则不须要后续庞杂的逻辑。
b. 但查询缓存的失效特殊频繁,只要有对一个表的更新,那末此表的缓存就会全体清空,因此不建议应用查询缓存。除非是表的数据变动频率不高的,如体系配置表
c.5.8.0已完整将查询缓存模块删掉
1.1.3 剖析器:内建解析树,数据表和数据列是不是存在, 别号是不是有歧义,如果通过树立一个新的解析树,再提交给优化器
a.词法剖析、语法剖析
1.1.4 优化器
优化器决议最优sql履行次序,如最优索引,join表的次序等
1.1.5 履行器
查询对当前表是不是有履行权限,若有权限,打开表,依据表引擎接口履行sql
1.2 存储引擎负责数据的存储和提取,包括InnoDB,MyISAM,Memry等,mysql5.5.5版本以上默许InnoDB
备注:
1、wait_timeout针对非交互式衔接;
interaction_timeout针对交互式衔接;
通过mysql客户端衔接数据库是交互式衔接,通过jdbc衔接数据库是非交互式衔接;
2、履行完成后写入缓存
问题:
1、为何对权限的检讨不在优化器之前做?
答:触发器是在履行器阶段肯定的
2、我创立了一个没有select权限的用户,履行select * from T where k=1,报错“select command denied”,并没有报错“unknown column”,是不是可以解释是在打开表以后才断定读取的列不存在?
答:这是一个安全问题,当既没有查询权限,where条件的字段不存在时,未避免泄漏太多信念,会直接断定无权限
3、剖析器到查询缓存的那个箭头表现甚么意思?
答:更新完回来失效缓存;
4、根本架构图中,剖析器指向了查询缓存,是这时候候把KEY放入缓存的吗?履行器不指向缓存Value是甚么时候放入缓存的?
答:其实履行完会写入,避免图乱,箭头去掉了,文中:履行完成后,成果写入查询缓存;1、mysql可分为server层和存储引擎
1.1 server层:
衔