概述
数据库表的索引从数据存储方式上可以分为聚簇索引和非聚簇索引(又叫二级索引或者辅助索引)两种。
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
注意:
- InnoDB存储引擎是将数据和索引都存储在一个文件中即.ibd中了。所以InnoDB存储引擎也称为聚集索引,因为将数据和索引放在一个文件中了。
- InnoDB存储引擎是Mysql的默认存储引擎。InnoDB存储引擎提供了具有提交、回滚、恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些。
- MySQL数据库存放数据目录里的db.opt文件是MySQL建库过程中自动生成的,记录该库的默认字符集编码和字符集排序规则用的。
MyISAM(非聚簇索引)
MySQL5.5版本之前默认存储引擎
特点:不支持事务、不支持外键约束
注意:
- MyISAM存储引擎将数据和索引存入两个不同的文件。
- MyISAM 不支持事务、也不支持外键,其优势是访问的速度快,对事务的完整性没有要求可以使用这个引擎来创建表 。