一.Mysql基础架构
1.1一条sql是怎么执行的,要经过哪些步骤?
大体来说可以分为,server层和存储引擎
连接器:
连接器负责和客户端进行连接,先通过TCP握手建立连接,建立完连接之后就要验证用用户名和密码进行鉴权,建立成功之后太久没有动静,就会自动断开连接,由wait_timeout控制,默认8小时。
查询缓存:
拿到一条sql执行,mysql会先查询缓存看之前是否已经执行过该sql,之前执行过的sql会以k-v形式存储在内存中,通过key直接返回,效率很高。
利大于弊:
只要有对一个表的更新,会失效全部缓存,对于频繁更新的表效率很低,对于不经常有更新的操作可以用,可以手动设置参数query_cache_type设置成DEMAND
select SQL_CACHE * from T where ID=10;mysql8.0之后缓存功能删除。
分析器:
词法,语法分析,看是否满足语法
优化器:
如果有多个索引决定执行哪个
执行
1.2存储引擎
通过show engines;可以查看当前数据库支持哪些存储引擎
Engine
:存储引擎名称。
Support
:是否支持该引擎以及该引擎是否为默认存储引擎,YES
表示支持,NO
表示不支持,DEFAULT
表示为默认存储引擎。
Comment
:存储引擎的简单介绍。
Transactions
:表示该引擎是否支持事务。
XA
:说明该存储引擎是否支持分布事务。
Savepoints
:说明该存储引擎是否支持部分事务回滚。
InnoDB与MyISAM存储引擎之间的比较
事务的支持:
mysam不支持事务,如果需要进行事务处理,所有的引擎都要使用innodb,mysam不会回滚到之前的状态。
主键处理:
innodb:聚簇索引,主键的叶子节点是该行的数据,而其他索引则指向主键。不指定会自动生成一个
mysam:非聚簇索引,主键和其他叶子节点储存指向数据的指针。允许没有主键
外键:
mysam:不支持
innodb:支持和其他表建立外键关联
锁支持:
innodb支持行级锁(更能支持高并发)
mysam只支持表级锁