MySQL有哪些常见的引擎,说说他们的区别?
show engines; #查看支持的引擎
MyISAM:非事务处理存储引擎
索引放在XX.MYI文件中,数据放在XX.MYD文件中。
在线分析处理OLAP。
全文索引。
InnoDB:具备外键功能的存储引擎、行锁
索引也是数据。数据和索引存在一个XX.IDB文件中。
在线事务处理OLTP。
Mermory:基于内存
Memory表至少比MyISAM表要快一个数量级,因为所有的数据都保存在内存中,不需要进行磁盘I/O。Memory表的结构在重启以后还会保留,但数据会丢失。
默认hash索引。
Archive:数据存档,数据插入后不能修改,只支持insert和select
针对高写入压缩做了优化的简单引擎,压缩存储1:10。
Maria
MyISAM后续版本
缓存数据和索引文件,行锁设计,MVCC,支持事务,更好的BLOB字符类型处理性能
NDB
集群存储引擎
数据全放内存(可以将非索引数据放磁盘)
Merge、CSV、Sphinx、Infobright
特点 | InnoDB | MyISAM | Memory | Archive |
---|---|---|---|---|
b+树索引 | yes | yes | yes | no |
MVCC | yes | no | no | no |
事务 | yes | no | no | no |
存储限制 | 64TB | 256TB | RAM | None |
索引缓存 | yes | yes | 本身就是缓存 | No |
外键 | yes | no | no | no |
锁粒度 | row | table | table | row |
全文索引 | yes | yes | no | no |
数据缓存 | yes | no | 本身就是缓存 | no |
数据库和实例的区别
- 数据库:物理操作系统文件或其他形式文件类型的集合。
- 数据库实例:有数据库后台进程/线程以及一个共享内存区组成。
查看MySQL从哪里读取的配置文件
从上到下找my.cnf文件,最终值以最后一个文件中的参数为准。
➜ ~ mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/Cellar/mysql-client/8.0.18/etc/my.cnf
~/.my.cnf
MySQL体系结构
- 连接池
- 管理服务和工具
- SQL接口
- 查询分析器
- 优化器
- 缓冲
- 存储引擎
- 物理文件