体系架构
C/S架构
客户端 进程名mysql
服务器 进程名mysqld (连接池、服务管理模块、SQL API、SQL解析器、SQL优化器、缓冲区、数据库文件set在磁盘,存储引擎、记录日志模块log)
由客户端发起连接请求(mysql -uroot -p),在服务器端由连接池接受请求,服务管理模块拿到用户信息进行匹配,匹配成功则连接成功。
然后阻塞等待客户端发起SQL语句请求,SQL语句到达 SQL API,API将语句交给解析器分析(词法、语法)然后交给优化器优化(就会产生N个执行策略计划,根据算法选择最合适的一条执行)执行前首先从缓冲区查数据,如果不存在就将查询请求交给某个存储引擎,存储引擎根据它自己针对数据库底层文件的读写查询方式在底层的数据库文件中拿到数据,并做日志记录,然后将数据一份交给缓冲区,一份沿着API接口交给客户端。
存储引擎
MyISAM
支持全文索引,不支持外键,B+树索引,锁机制是表锁,不支持事务,数据在磁盘存储
数据和索引分离,在索引树的叶子节点中只存放数据的地址。
一个MyISAM的表生成三个文件:.frm(创建表的信息和配置信息),.myd(数据信息a) .myi(索引)
数据可以离散或随机分布 非聚集索引
select *from stu where name=“xxx”;
只需要查询一次,叶子节点上存储的是数据。
InnoDB
不支持全文索引,支持外键,B+树索引,锁机制是行锁,支持事务,数据在磁盘存储
索引当成数据的一部分,数据直接在叶子节点上存储
数据范围比较聚集
如果设计过程中没有给出索引,没有主键没有唯一键,就会自动添加一个6字节的隐藏的字段作为主键,为每一行生产一个6字节的id作为主键。
select *from stu where name=“xxx”;
需要查询两次:
- 查询辅助索引,找主索引的索引值
- 查询主索引,找数据
MEMORY
支持哈希、B+树索引,默认是哈希索引
数据在内存存储(数据不安全,容易丢失),临时表只做临时使用
将varchar当作char处理
不支持.text字段,BLOB图片类型字段
在真实处理过程中,MEMROY会只处理text种可处理的字段,不可处理的会交给MyISAM处理,则数据就会有一部分在内存,一部分在磁盘。所以在使用过程中尽量避免这两个字段。
ARCHIVE
归档压缩 1:10数据压缩
适应于数据量大 查询少 比如 :日志数据记录
只支持insert和select操作。