MySQL索引基础知识
# MySQL索引基础知识**定义**
> 索引存在于对应的索引文件中,索引本质就是一组排好了顺序的一组数据
**作用**
* 索引数据中进行排序时,避免再次排序
* 在索引数据中对数据行进行定位时,避免全表扫描
## 索引基本操作
查看表文件中已经存在的索引
```sql
SHOW INDEX FROM <表名>;
```
创建索引
```sql
CREATE INDEX <索引名称> ON <表名> (<字段名>);
```
删除索引
```sql
DROP INDEX <索引名称> ON <表名>;
```
## 索引的分类
### 聚簇索引与非聚簇索引
**聚簇索引**
> 只能来自于采用`Innodb`存储引擎表的数据
* MySQL自动将采用了`InnoDB`存储引擎表中的主键建立索引,这个索引就是`聚簇索引`;
* 如果当前表中没有主键,MySQL将会选择添加一个`唯一性约束`的字段,作为`聚簇索引`;
* 如果当前表中既没有主键字段,也没有添加了`唯一性约束`字段,MySQL将随机选取一个字段作为`聚簇索引`;
* 在采用`InnoDB存储引擎`的表文件中,必然存在一个聚簇索引;
* 在采用`InnoDB存储引擎`的表文件中,只能有一个聚簇索引;
* 在表文件中其他字段上建立的索引都是非聚簇索引;
**非聚簇索引**
* 由开发人员自行创建
* 对于采用了`InnoDB存储引擎`的数据表文件,除了一个`聚簇索引`之外,其他字段上创建的索引都是`非聚簇索引`;
* 在采用了`MYISAN存储引擎`的数据表文件中,创建的所有索引都是`非聚簇索引`;
**聚簇索引和非聚簇索引的区别**
聚簇索引:数据节点上存储的`当前数据所在行数`以及`当前数据所在数据行的内容`;因为聚簇索引的这种结构,所以在查询时可以直接在定位数据节点上,读取当前数据所在数据行中字段信息,不需要使用`I/O流`到磁盘上表文件上进行读取,因此执行效率较快;
非聚簇索引:数据节点上存储的`当前数据所在行数`;由于数据节点存储的当前数据所在行数,没有其他相关内容,所以定位之后,需要使用`I/O流`到硬盘i上表文件中定位数据行其他字段内容,因此执行效率相对较慢;
### 主键索引,唯一性索引
**主键索引**
如果当前表文件中字段添加了主键约束,MySQL主动的将当前字段上数据进行排序,其生成的索引被称为主键索引;
**唯一性索引**
如果当前表文件中字段添加了唯一性约束,MySQL主动的将当前字段上的数据进行排序,其生成的索引被称为唯一性索引;
**普通索引**
如果当前表文件中字段上没有添加任何约束霍索引,此时在这个字段上创建的索引就是普通索引;
**执行效率:主键索引 > 唯一性索引 > 普通索引**
### 单个索引,复合索引
- 单字段索引的创建
```sql
CREATE INDEX <索引名> ON <表名> (字段名);
```
- 复合索引的创建
```sql
CREATE INDEX <索引名> ON <表名> (字段名1, 字段名2, 字段名3, ...);
``` 催更催更催更
页:
[1]