36 lines
1.6 KiB
Markdown
36 lines
1.6 KiB
Markdown
|
|
# 一、索引的概念
|
|||
|
|
|
|||
|
|
1. 索引是一个*单独的、物理的* **数据库结构**
|
|||
|
|
2. 索引是*依赖于***表**建立的
|
|||
|
|
3. 索引是某个表中*一列*或*若干列*值的**集合**
|
|||
|
|
4. 索引可以**提高**数据的访问速度
|
|||
|
|
# 二、索引的分类
|
|||
|
|
|
|||
|
|
1. 普通索引:最基础的索引类型,作用于单列或多列(组合索引);
|
|||
|
|
仅用于加速数据检索,不强制要求列的唯一性,允许重复值和null值。
|
|||
|
|
2. 唯一性索引:列的值必须唯一,但允许有空值,关键字为unique
|
|||
|
|
3. 全文索引:主要用在查询数据库量较大的字符型字段上,关键词为fulltext
|
|||
|
|
4. 空间索引:是对空间数据类型的字段建立的,关键字为spatial
|
|||
|
|
5. 单列索引:即一个索引只包含单个列,一个表可以有多个单列索引
|
|||
|
|
6. 多列索引:就是在多个字段上创建一个索引,也成为复合索引
|
|||
|
|
# 三、索引的创建
|
|||
|
|
|
|||
|
|
1. 创建表的同时去创建索引
|
|||
|
|
2. 修改表的同时去创建索引
|
|||
|
|
```sql
|
|||
|
|
alter table 表名
|
|||
|
|
add index 索引名(列名)
|
|||
|
|
```
|
|||
|
|
1. 直接创建索引(重点)
|
|||
|
|
```sql
|
|||
|
|
create [unique|fulltext|spatial] index 索引名称
|
|||
|
|
[using {btree|hash}]
|
|||
|
|
on 表名(列名[(n)][asc|desc],.....)
|
|||
|
|
```
|
|||
|
|
# 四、索引的设计原则
|
|||
|
|
1. 主键、连接中频繁使用的列需要建立索引;
|
|||
|
|
2. 避免对经常更新的表进行过多的索引;
|
|||
|
|
3. 数据量小的表最好不要使用索引;
|
|||
|
|
4. 在不同值少的列上不要建立索引;
|
|||
|
|
5. 指定唯一索引是由某种数据本身的特征来决定的;
|
|||
|
|
6. 为经常需要排序、分组和联合操作的字段建立索引。
|