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接口
- 查詢分析器
- 優化器
- 緩衝
- 存儲引擎
- 物理文件