存储引擎是存储数据,建立索引,更新查询数据等等技术的实现方式。存储引擎是针对表的,在创建表的时候可以指定所要使用的存储引擎。
这里主要介绍mysql中支持的其中三种存储引擎:
InnoDB(mysql默认的存储引擎):支持事务;支持外键;支持行锁表锁;.frm文件存放表结构,.idb文件存放数据和索引。
MyISAM:不支持事务;不支持外键;只支持表锁;.frm文件存放表结构,.MYD存放数据,.MYI存放索引。
MEMORY:.frm文件存放表结构,数据直接存在内存中(服务关闭后数据就会丢失),默认使用哈希索引。
聚簇索引(也称聚集索引)和非聚簇索引(也称辅助索引、二级索引)
聚簇索引和非聚簇索引都是使用B-Tree结构。聚簇索引中,叶子节点中包含了对应的整个数据行的信息(索引和数据是在一起的);非聚簇索引中,叶子节点中并未包含对应的数据(索引和数据不是在一起的)。
InnoDB:
InnoDB使用聚簇索引的方式储存表数据。InnoDB使用表的主键作为索引(若表未提供主键,则隐藏的_rowid字段会被作为主键),构建出B-Tree,并将表中所有数据行的信息都存储在相应的叶子节点中。
在InnoDB中,我们自己建立的索引都为非聚簇索引,索引的叶子节点中仅包含了主键信息。我们需要去聚簇索引中找到该主键的叶子节点,才能获取到所有的数据。
(InnoDB的索引和数据存在同个文件中。其中,主键索引为聚簇索引,其包含了所有的数据;其余索引为非聚簇索引)
MyISAM:
MyISAM的索引文件和数据文件是分离的。其索引文件中存储的索引都为非聚簇索引,叶子节点中存储的是指向数据文件的指针。