目录
1、简介
MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引和空间索引等。
- 从功能逻辑上说,索引主要有4类,分别是普通索引、唯一索引、主键索引、全文索引。
- 按照物理实现方式,索引可以分为2种:聚簇索引和非聚簇(cu)索引
- 按照作用字段个数进行划分,分成单列索引和联合索引。
2、普通索引
在创建普通索引时,不附加任何限制条件,只是用于提高查询效率。这类索引可以创建在任何数据类型中,其值是否唯一和非空,要由字段本身的完整性约束条件决定。建立索引以后,可以通过索引进行查询。例如,在表 student 的字段 name 上建立一个普通索引,查询记录时就可以根据该索引进行查询。
3、唯一索引
使用 UNIQUE 参数可以设置索引为唯一性索引,在创建唯一性索引时,限制该索引的值必须是唯一的,但允许有空值。在一张数据表里可以有多个唯一索引。
例如,在表 student 的字段 email 中创建唯一性索引,那么字段 email 的值就必须是唯一的。通过唯一性索引,可以更快速地确定某条记录
4、 主键索引
主键索引就是一种特殊的唯一性索引,在唯一索引的基础上增加了不为空的约束,也就是 NOT NULL + UNIQUE,一张表里最多只有一个主键索引。
5、单列索引
在表的单个字段上创建索引。单列索引只根据该字段进行索引。单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引。只要保证该索引只对应一个字段即可。一个表可以有多个单列索引。
6、多列(组合、联合)索引
多列索引是在表的多个字段组合上创建一个索引。该索引指向创建时对应的多个字段,可以通过这几个字段进行查询,但是只有查询条件中使用了这些字段的第一个字段时才会被使用。例如,在表的字段 id、name 和 gender 上建立一个多列索引 idx_id_name_gender ,只有在查询条件中使用了字段 id 时该索引才会被使用。使用组合索引时遵循最左前缀集合
7、全文索引
全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。全文索引非常适合大型数据集,对于小的数据集,它的用处比较小。
使用参数 FULLTEXT 可以设置索引为全文索引。在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引只能创建在 CHAR、VARCHAR 或 TEXT 类型及其系列类型的字段上,查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。例如,表 student 的字段 infomation 是 TEXT 类型,该字段包含了很多文字信息。在字段 information 上建立全文索引后,可以提高查询字段 information 的速度
8、 聚簇索引(聚类索引)
聚集索引指索引项的排序方式和表中数据记录排序方式一致的索引。聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。术语“聚簇”表示数据行和相邻的键值紧凑的存储在一起。
也就是说聚集索引的顺序就是数据的物理存储顺序。它会根据聚集索引键的顺序来存储表中的数据,即对表的数据按索引键的顺序进行排序,然后重新存储到磁盘上。因为数据在物理存放时只能有一种排列方式,所以一个表只能有一个聚集索引。
比如字典中,用‘拼音’查汉字,就是聚集索引。因为正文中字都是按照拼音排序的。而用‘偏旁部首’查汉字,就是非聚集索引,因为正文中的字并不是按照偏旁部首排序的,我们通过检字表得到正文中的字在索引中的映射,然后通过映射找到所需要的字。
聚集索引的使用场合为:
- 查询命令的回传结果是以该字段为排序依据的;
- 查询的结果返回一个区间的值;
- 查询的结果返回某值相同的大量结果集。
聚集索引会降低 insert,和update操作的性能,所以,是否使用聚集索引要全面衡量。
创建聚簇索引:CREATE CLUSTERED INDEX [索引名] ON 表名 (列名)。
9、非聚簇(cu)索引(非聚类索引)
非聚集索引: 索引顺序与物理存储顺序不同
非聚集索引的使用场合为:
- 查询所获数据量较少时;
- 某字段中的数据的唯一性比较高时;
create NONCLUSTERED INDEX 索引名称 ON 表名(字段名)