概述

数据库表的索引从数据存储方式上可以分为聚簇索引和非聚簇索引(又叫二级索引或者辅助索引)两种。

Innodb的聚簇索引在同一个BTree中保存了索引列和具体的数据,在聚簇索引中,实际的数据保存在叶子页中,中间的节点页保存指向下一层页面的指针。

“聚簇”的意思是数据行被按照一定顺序一个个紧密地排列在一起存储。一个表只能有一个聚簇索引,因为在一个表中数据的存放方式只有一种。

一般来说,将通过主键作为聚簇索引的索引列,也就是通过主键聚集数据。

如果你不为表指定一个主键,MySQL会将第一个组成列的not null的唯一索引作为聚簇索引。

如果InnoBD表没有主键且没有适合的唯一索引,MySQL将自动创建一个隐藏的名字为“GEN_CLUST_INDEX ”的聚簇索引。

InnoDB(聚簇索引)

MySQL5.5版本之后默认存储引擎

特点:支持事务、支持外键约束

-- 创建 innodb存储引擎表
CREATE TABLE tab_innodb(
 id INT,
 name VARCHAR(32)
)ENGINE = INNODB; -- 这里不指定ENGINE = INNODB默认也是INNODB

image-khdn.png

注意:

  1. InnoDB存储引擎是将数据和索引都存储在一个文件中即.ibd中了。所以InnoDB存储引擎也称为聚集索引,因为将数据和索引放在一个文件中了。
  2. InnoDB存储引擎是Mysql的默认存储引擎。InnoDB存储引擎提供了具有提交、回滚、恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些。
  3. MySQL数据库存放数据目录里的db.opt文件是MySQL建库过程中自动生成的,记录该库的默认字符集编码和字符集排序规则用的。

MyISAM(非聚簇索引)

MySQL5.5版本之前默认存储引擎

特点:不支持事务、不支持外键约束

image-eqqq.png

注意:

  1. MyISAM存储引擎将数据和索引存入两个不同的文件。
  2. MyISAM 不支持事务、也不支持外键,其优势是访问的速度快,对事务的完整性没有要求可以使用这个引擎来创建表 。