## 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密碼查看與修改