## MySQL常用存储引擎
### MySQL常用存储引擎之MyISAM
MySQL 5.5 之前版本默认存储引擎,在排序、分组等操作中,当数量超过一定大小之后,由查询优化器建立的临时表。
MyISAM 存储引擎表由 MYD (表数据) 、MYI (表索引) 与 frm (表结构) 组成。
#### MyISAM 特性
* 并发性与锁级别
表级锁
* 表损坏修复
```
check table tableName
repair table tabelName
```
* MyISAM 表支持的索引类型
fulltext
* MyISAM表支持数据压缩
```
myisampack
```
> 压缩后的表无法进行写操作,只能进行读操作。
##### MyISAM限制
在 MySQL 版本小于 5.0 时,默认表大小为 4G,如存储大表则要修改表的 `MAX_Rows` 和 `AVG_ROW_LENGTH` 参数。
在MySQL版本大于5.0时,默认支持为 256TB。
##### MyISAM 适用场景
非事务型应用
只读类应用
空间类的应用
### MySQL常用存储引擎之InnoDB
MySQL5.5 及之后版本默认存储引擎。
InnoDB 使用表空间进行数据存储
* 如果数据库的配置参数 `innodb_file_pre_table => on`,那么创建后的 InnoDB 引擎的表将产生 `tableName.frm` 和 `tableName.ibd` 文件。
* 如果数据库的配置参数 `innodb_file_pre_table => off`,那么创建后的 InnoDB 引擎的表将产生 `ibdata*`(共享表空间) 和 `tableName.frm`
那么,系统表空间和独立表空间要如何选择呢?
- `innodb_file_pre_table => off` 建立的表情况下,**系统表空间**无法简单的收缩系统文件大小,造成大量的空间浪费,并且会产生大量的磁盘碎片,从而降低系统的性能。
- **独立表空间**可以通过 `optimize table` 命令收缩系统文件。
- **系统表空间**会产生IO瓶颈
- **独立表空间**可以同时向多个文件刷新数据
> 建议对 InnoDB 使用独立表空间,即 `innodb_file_pre_table => on`
#### InnoDB 特性
* InnoDB 是一种事务性存储引擎
* 完全支持事务的 ACID 特性
* InnoDB 支持行级锁
行级锁可以最大程度的支持并发
行级锁是有存储引擎层实现
* 锁的类型:
- 共享锁(也称读锁)
- 独占锁(也称写锁)
* InnoDB 状态检查
```
show engine innodb status
```
* 适用场景
InnoDB适用于大多数 OLTP 应用
### MySQL常用存储引擎之CSV
#### 文件系统存储特点
数据以文本方式存储在文件中,他们分别包含有如下文件:
`.csv` 文件存储表内容
`.csm` 文件存储标的元数据如表状态和数据量
`.frm` 文件存储表结构信息
##### CSV文件存储的特点
* 以 csv 格式进行数据存储
* 所有列必须都是不能为 null 的数据
* 不支持索引
* 可以对数据文件直接编辑
##### 适用场景
适合作为数据交换的中间表
### MySQL常用存储引擎之Archive
以 zlib 对表数据进行压缩,磁盘 I/O更少
数据存储在 `tableName.ARZ` 为后缀的文件中
#### Archive 文件存储特点
只支持 `insert` 和 `select` 操作
只允许在自增 ID 列上加索引
#### 使用场景
日志和数据采集类应用
### MySQL常用存储引擎之Memory
#### 文件系统存储特点
也称 heap 存储引擎,所以数据保存在内存中。
#### 功能特点
* 支持 hash 索引(等值查找快)和 Btree 索引(范围查找快)
* 所有字段都为固定长度,例如:`varchar(10) = char(10)`
* 不支持 `BLOB/TEXT` 等大字段
* `Memory` 存储引擎使用表级锁
* 最大大小由 `max_heap_table_size` 参数决定
#### 使用场景
* 用于查找或者是映射表,例如:邮编和地区的对应表
* 用于保存数据分析中产生的中间表
* 用于缓存周期性聚合数据的结果表
> Memory 数据易丢失,所以要求数据可再生。
### MySQL常用存储引擎之Federated
默认禁止,启用需要在启动时增加 federated 参数。
```
mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
```
#### 功能特点
* 提供了访问远程MySQL服务器上表的方法
* 本地不存储数据,数据全部放到远程服务器上
* 本地需要保存表结构和远程服务器的连接信息
- 写在前面
- MySQL的使用
- MySQL多表同时删除方案
- MySQL跨表、多表更新SQL语句总结
- MySQL存储引擎
- 安装
- 常规方式编译安装MySQL
- 采用cmake方式编译安装MySQL
- 使用rpm包安装MySQL
- 使用yum方式安装MySQL
- 采用二进制方式免编译安装MySQL
- 多实例的安装
- 什么是多实例
- 多实例的作用、问题以及应用场景
- 多实例安装01【推荐】
- 多实例官方安装方案02
- 启动、用户和权限管理
- 单实例MySQL的启动和关闭的方法
- 设置及修改MySQL root用户密码
- 找回丢失的MySQL root用户密码
- 创建MySQL用户及用户权限管理
- 基础命令的操作
- MySQL库和表相关操作
- MySQL中的索引操作
- MySQL常用命令
- MySQL的错误代码
- MySQL复习秘籍
- 备份与恢复
- 备份
- 恢复
- mysqlbinlog命令
- 服务日志
- 主从复制
- 主从复制部署配置问题汇总
- 主从复制读写分离
- 灾难恢复
- 配置phpmyadmin连接多实例MySQL
- 其他相关
- Sphinx实验
- 中文分词技术
- MySQL语句大全
- 用户创建、权限、删除
- 数据库与表显示、创建、删除
- 表复制及备份还原
- 数据库表中数据操作
- 修改表的列与表名
- 修改表中的数据
- 查询表
- 日志
- 批量修改Mysql表引擎为InnoDB的方法
- 数据库抽象层 PDO
- PDO对象常用方法
- PDO 事务处理
- PDO 与 MySQLi 二者效率简单比较
- 大小写敏感性 lower_case_table_names
- CentOS7安装MySQL5.7密码查看与修改