索引
数据库只做两件事:存储数据、检索数据。而索引是在你存储的数据之外,额外保存一些路标(一般是B+树),以减少检索数据的时间、所以索引是主数据衍生的附加结构。
一张表可以建立任意多个索引,每个索引可以是任意多个字段的组合。索引可能会提高查询速度(如果查询时使用了索引),但一定会减慢写入速度。因为每次写入时都需要更新索引,所以索引只应该加在经常需要搜索的列上,不要加在写多读少的列上。
单列索引和复合索引
只包含一个字段的索引叫做单列索引,包含两个或以上字段的索引叫做复合索引(或者组合索引)。建立复合索引时,字段的顺序极其重要。
下面这个SQL语句在列X,列Y,列Z 上建立了一个复合索引
CREATE INDEX 索引名 ON 表名(X,Y,Z);
这其实相当于建立了三个索引,分别是:
- 单列索引(X)
- 复合索引(X,Y)
- 复合索引(X,Y,Z)
唯一索引和主键
主键是一种特殊的唯一索引,唯一索引可以为null,主键不允许为null。一张表最多建立一个主键,也可以不建立主键。
聚簇索引
Innodb使用聚簇索引,叶子结点就是数据节点,保存一行数据
非聚簇索引
MyIsam使用非聚簇索引,叶子结点保存数据所在的地址
