第一章 mysql体系结构和存储引擎
1.1 数据库和实例
数据库:物理操作系统文件或其他形式文件类型的集合
实例:MySQL数据库由后台线程以及一个共享内存区组成
启动服务:
查看实例进程
配置文件: mysql --help|grep my.cnf
datadir -- 可能只是一个软连接
1.2 MySQL体系结构
连接池
管理服务和工具组件
SQL接口组件
查询分析组件
优化器组件
缓存组件
插件式存储引擎
物理文件
存储引擎是基于表的,不是基于库的
1.3 MySQL存储引擎
官方文档:自定义存储引擎的过程
innodb
innodb存储引擎:支持事务、行锁设计、支持外键、非锁定读,
innodb表空间由innodb存储引擎自身进行管理,支持raw disk上创建表空间
使用mvcc提高并发性
支持SQL标准的四种事务隔离级别,使用next-key lock避免幻读
插入缓冲、double write、自适应哈希索引、预读
采用聚簇索引的方式组织表数据(主键)
MyISAM
MyISAM存储引擎不支持事务、表锁设计,支持全文索引
缓冲池只缓存(cache)索引文件,而不缓冲数据文件
ndb存储引擎
NDB的特点是数据全部放在内存中,主键查询快,并且通过添加NDB数据存储节点(Data Node)可以线性地提高数据库性能,是高可用、高性能的集群系统
NDB存储引擎的连接操作(JOIN)是在MySQL数据库层完成的,而不是在存储引擎层完成的。这意味着,复杂的连接操作需要巨大的网络开销,因此查询速度很慢
Memory存储引擎
数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。它非常适合用于存储临时数据的临时表,以及数据仓库中的纬度表。Memory存储引擎默认使用哈希索引,而不是我们熟悉的B+树索引。
只支持表锁,并发性能较差,并且不支持TEXT和BLOB列类型
存储变长字段(varchar)时是按照定常字段(char)的方式进行的,因此会浪费内存
Archive存储引擎
只支持INSERT和SELECT操作,Archive存储引擎使用zlib算法将数据行(row)进行压缩后存储,压缩比一般可达1∶10;
Archive存储引擎非常适合存储归档数据,如日志信息。Archive存储引擎使用行锁来实现高并发的插入操作,但是其本身并不是事务安全的存储引擎,其设计目标主要是提供高速的插入和压缩功能。
Federated存储引擎
不存放数据,类似oracle的db link
Maria存储引擎
可以看做是MyISAM的后续版本,支持缓存数据和索引文件,应用了行锁设计,提供了MVCC功能,支持事务和非事务安全的选项,以及更好的BLOB字符类型的处理性能
1.4 存储引擎之间的比较
1.5 连接MySQL
1.tcp/ip
在通过TCP/IP连接到MySQL实例时,MySQL数据库会先检查一张权限视图,用来判断发起请求的客户端IP是否允许连接到MySQL实例。该视图在mysql架构下,表名为user
2.socket连接
只能本地连接
资料来源于姜承尧老师的《MySQL技术内幕 InnoDB存储引擎》