MySQL体系架构如下图:
从体系结构图中可以发现,MySQL数据库区别于其它数据库的最重要的一个特点就是其插件式的表存储引擎。
插件式存储引擎的好处是,每个存储引擎都有各自的特点,能够根据具体的应用建立不同存储引擎表。
1. InnoDB存储引擎
lnnoDB是MySQL的默认事务型引擎,也是最重要、使用最广泛的存储引擎。它被设计用来处理大量的短期(short-lived)事务,应该优先考虑InnoDB引擎。
2. MyISAM存储引擎
在MySQL 5.1及之前的版本,MylSAM是默认的存储引擎。
但是MylSAM不支持事务和行级锁,而且崩溃后无法安全恢复。
同时MylSAM对整张表加锁,很容易因为表锁的问题导致典型的性能问题。
3. Memory存储引擎
Memory表至少比MylSAM表要快一个数量级,数据文件是存储在内存中。Memory表的结构在重启以后还会保留,但数据会丢失。
Memroy表在很多场景中可以发挥很好的作用:
用于查找(lookup)或者映射(mapping)表,例如将邮编和州名映射的表。
用于缓存周期性聚合数据(periodically aggregated data)的结果。
用于保存数据分析中产生的中间数据。
4. Archive存储引擎
Archive存储引擎只支持insert和delete操作,会缓存所有的写并利用zlib对插入的行进行压缩,所以比MyISAM表的磁盘I/O更少。但是每次select查询都需要执行全表扫描,所以Archive表适合日志和数据采集类应用。
5. CVS存储引擎
CVS引擎可以将普通的CVS文件(逗号分割值的文件)作为MySQL的表来处理,但这种表不支持索引。因此CVS引擎可以作为一种数据交换的机制,非常有用。
6. MyISAM和InnoDB的区别是什么?
1.InnoDB支持事务,MylSAM不支持事务
这是MySQL将默认存储引擎从MylSAM变成InnoDB的重要原因之一
2.InnoDB支持外键,而MylSAM不支持
对一个包含外键的InnoDB表转为MyISAM会失败
3.lnnoDB是聚集索引,MylSAM是非聚集索引
聚簇索引的数据文件存放在主键索引的叶子节点上,因此 InnoDB必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大
而MylSAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的
4.InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快
5.InnoDB最小的锁粒度是行锁,MylSAM最小的锁粒度是表锁
一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。这也是MySQL将默认存储引擎从 MylSAM变成InnoDB的重要原因之一