1.存储引擎:存储数据,为存储的数据建立索引,更新、查询数据。
2.因为在关系数据库中数据以表的形式存储,所以,存储引擎也可以称为表类型。
3.查看当前MySQL数据库支持的存储引擎:show engines;
或者show variablkes like 'have%';
。
4.InnoDB存储引擎:
①是MySQL的数据库引擎之一。
②是事务安全的。
如果某张表需要执行大量的增(insert)、删(delete)、改(update)操作,出于事务安全方面的考虑,InnoDB存储引擎是更好的选择。
③支持外键。
④InnoDB存储引擎的表支持全文索引,大幅提升了InnoDB存储引擎的文本检索能力。
⑤InnoDB表空间分为共享表空间、独享表空间。
⑥适用场景:需要事务支持、行级锁定对高并发有很好地适应能力,但需要确保查询是通过索引完成、数据更新较为频繁。
5.MyISAM存储引擎:
①是MySQL默认存储引擎。
②基于传统的ISAM类型。
ISAM( indexed sequential access method):有索引的顺序访问方法,是存储记录和文件的标准方法。
③具有检查和修复表格的大多数工具。
④MyISAM表格可以被压缩,而且支持全文索引。
⑤不是事务安全的。
如果事务回滚将造成不完全回滚,不具有原子性。
⑥不支持外键。
如果某张表需要执行大量的查询(select)语句,出于性能方面的考虑,MyISAM是更好的选择。
⑦不缓存数据文件。
⑧适用场景:不需要事务支持、并发相对较低、数据修改相对较少、以读为主、数据一致性要求不是特别高。
6.MEMORY存储引擎:
①将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。
②适用于存储临时数据的临时表,以及数据仓库中的纬度表。
MySQL数据库使用MEMORY存储引擎作为临时表来存放查询结果集。
③默认使用哈希索引。
④只支持表锁。
⑤并发性能较差。
⑥不支持text和blob列类型。
⑦会浪费内存,比如:存储变长字段(varchar)时是按照定长字段(char)的方式进行的。
7.MERGE存储引擎:
①是一组MyISAM表的组合。
这些MyISAM表必须结构完全相同,MERGE表本身没有数据,对MERGE类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行的。
②对MERGE表进行drop操作,这个操作只删除MERGE的定义,对内部的表没有任何影响。
③对表的大小有要求,不能是太大的表。
④适用场景:需要很快的读/写速度,对数据安全性要求较低。
MyISAM和InnoDB的区别:
Ⅰ.InnoDB支持事务,而MyISAM不支持事务。
Ⅱ.InnoDB支持外键,而MyISAM不支持外键。
Ⅲ.InnoDB是行锁,而MyISAM是表锁(每次更新增加删除都会锁住表)。
Ⅳ.和MyISAM的索引都是基于b+树,但他们具体实现不一样,InnoDB的b+树的叶子节点是存放数据的,MyISAM的b+树的叶子节点是存放指针的。
Ⅴ.InnoDB是聚簇索引,必须要有主键,一定会基于主键查询,但是辅助索引就会查询两次。MyISAM是非聚簇索引,索引和数据是分离的,索引里保存的是数据地址的指针,主键索引和辅助索引是分开的。
Ⅵ.InnoDB不存储表的行数,所以select count( * )的时候会全表查询。而MyISAM会存放表的行数,select count(*)的时候会查的很快。