之前松哥在前面的文章中介绍MySQL的索引时,有小伙伴表示被概念搞晕了,主键索引、非主键索引、聚簇索引、非聚簇索引、二级索引、辅助索引等等,今天咱们就来捋一捋这些概念。
1.按照功能划分按照功能来划分,索引主要有四种:
普通索引唯一性索引主键索引全文索引普通索引就是最最基础的索引,这种索引没有任何的约束作用,它存在的主要意义就是提高查询效率。
普通索引创建方式如下:
CREATETABLE`user`(`id`int(11)unsignedNOTNULLAUTO_INCREMENT,`name`varchar(64)DEFAULTNULL,PRIMARYKEY(`id`),KEY`name`(`name`))ENGINE=InnoDBAUTO_INCREMENT=4DEFAULTCHARSET=utf8mb4;
name字段就是一个普通索引(括号外面的是索引名,里边的是索引的字段)。
唯一性索引则在普通索引的基础上增加了数据唯一性的约束,一张表中可以同时存在多个唯一性索引,唯一性索引创建方式如下:
CREATETABLE`user`(`id`int(11)unsignedNOTNULLAUTO_INCREMENT,`name`varchar(64)DEFAULTNULL,PRIMARYKEY(`id`),UNIQUEKEY`name`(`name`))ENGINE=InnoDBAUTO_INCREMENT=4DEFAULTCHARSET=utf8mb4;
name字段就是唯一性索引。
主键索引则是在唯一性索引的基础上又增加了不为空的约束(换言之,添加了唯一性索引的字段,是可以包含NULL值的),即NOTNULL+UNIQUE,一张表里最多只有一个主键索引,当然一个主键索引中可以包含多个字段。
前面两个例子中都有主键索引的创建方式,我这里就不再列举了。
全文索引其实我们很少在MySQL中用,如果项目中有做全文索引的需求,一般可以通过Elasticsearch或者Solr来做,目前比较流行的就是Elasticsearch了,松哥之前也录过专门的视频,