《MySQL技術內幕 InnoDB存儲引擎》讀書筆記
1.1 數(shù)據(jù)庫和實例
- 數(shù)據(jù)庫:物理操作系統(tǒng)下的文件或其他形式文件(如內存)類型的集合
- 實例:MySQL數(shù)據(jù)庫程序運行時的一個線程协怒,用于操作數(shù)據(jù)庫文件
1.2 MySQL體系結構
結構圖 摘自互聯(lián)網(wǎng)
自上而下撒遣,從左到右介紹:
- Connectors: 不同語言連接MySQL逆甜,如Java的mysql-connector-java 驅動
- Enterprise Management Services: 管理服務或工具組件
- ConnectionPool: 連接池揭蜒,維護數(shù)據(jù)庫連接狀態(tài)
- SQL interface: 數(shù)據(jù)庫操作接口
- Parser: 查詢分析器
- Optimizer: 優(yōu)化器組件
- Caches & Buffers: 緩沖組件
- Pluggable Storage Engines: 插件式存儲引擎
- File System: 物理文件
1.3 MySQL存儲引擎
存儲引擎能夠根據(jù)具體的應用建立不同存儲引擎表港令。
下面是對一些存儲引擎簡單介紹:
1.3.1 InnoDB
- 支持 事務坯癣,其特點是 行鎖設計买决、支持外鍵
- 支持全文索引
- 支持 非鎖定讀莲绰,即默認讀取操作不會產(chǎn)生鎖
- 高并發(fā)捧毛,高性能覆旭,高可用,高可拓展
- 采用了聚集的方式岖妄,每張表都是按主鍵的順序進行存放型将,如果沒有顯式的指定主鍵,它會為表的每一行生成一個6字節(jié)的ROWID作為主鍵
1.3.2 MyISAM
- 不支持事務荐虐、表鎖設計
- 支持全文索引
- 緩沖池只緩沖索引文件七兜,不緩沖數(shù)據(jù)文件
- 存儲引擎表由MYD和MYI組成,MYD用來存放數(shù)據(jù)文件福扬,MYI用來存放索引文件
1.3.3 NDB
- 是一個集群存儲引擎腕铸,結構是share nothing的集群架構,具備更高的可用性
- 數(shù)據(jù)全部存放在內存中铛碑,可以將非索引數(shù)據(jù)存放在磁盤上
- 主鍵查找快
- 不適合連接操作(Join)狠裹。ps: MySQL數(shù)據(jù)庫層完成,而不是存儲索引層汽烦,復雜的連接需要巨大的網(wǎng)絡開銷涛菠,因此查詢速度很慢。
1.3.4 Memory
- 數(shù)據(jù)存放在內存中撇吞,斷電后消失俗冻,查詢速度快,適合存儲臨時數(shù)據(jù)
- 默認使用哈希索引
- 只支持表鎖牍颈,并發(fā)性能差
- varchar類型是按照定常字段(char)的方式存儲迄薄,會浪費內存