1. 首先我们需要明确一下什么是索引以及为什么要使用索引:
索引在 MySQL 中也叫做 "键", 是存储引擎用于快速找到记录的一种数据结构. 在生产环境中, 对于数据库我们最常进行的是查询的操作, 而当我们的数据非常大的时候, 提高我们的查询效率就变得尤为重要, 而索引可以帮我们很好的优化这方面的性能. 简单来说, 索引就相当于我们新华大字典的音序表, 可以快速的帮我们找到我们需要的数据所在的位置
2. 实现:
索引通常是使用 b + 树这种数据结构实现的, b+tree 索引加速了数据访问, 因为存储引擎不会再去扫描整张表得到需要的数据; 相反, 它从根节点开始, 根节点保存了子节点的指针, 存储引擎会根据指针快速寻找数据.
3. 索引的分类
(1) 普通索引 index : 加速查找
(2) 唯一索引
主键索引: primary key : 加速查找 + 约束 (不为空且唯一)
唯一索引: unique: 加速查找 + 约束 (唯一)
(3) 联合索引
-primary key(id,name): 联合主键索引
-unique(id,name): 联合唯一索引
-index(id,name): 联合普通索引
(4) 全文索引 fulltext : 用于搜索很长一篇文章的时候, 效果最好.
(5) 空间索引 spatial
4. 索引的使用
# 方法一: 创建表时
CREATE TABLE 表名 (
字段名 1 数据类型 [完整性约束条件...],
字段名 2 数据类型 [完整性约束条件...],
[UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY
[索引名] (字段名 [(长度)] [ASC |DESC])
- );
- #方法二: CREATE 在已存在的表上创建索引
CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名
ON 表名 (字段名 [(长度)] [ASC |DESC]) ;
- #方法三: ALTER TABLE 在已存在的表上创建索引
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX
索引名 (字段名 [(长度)] [ASC |DESC]) ;
- #删除索引: DROP INDEX 索引名 ON 表名字;
5. 关于使用索引的优缺点
优点:
1) 建立索引可以大大提高检索的数据, 以及减少表的检索行数
2) 在表连接的连接条件 可以加速表与表直接的相连
3) 在分组和排序字句进行数据检索, 可以减少查询时间中 分组 和 排序时所消耗的时间 (数据库的记录会重新排序)
4) 建立索引, 在查询中使用索引 可以提高性能
缺点:
1) 创建和维护索引的时候, 会消耗时间
2) 创建出来的索引会占据一定的物理空间
3) 当对表的数据进行 INSERT,UPDATE,DELETE 的时候, 索引也要动态的维护, 这样就会降低数据的维护速度,(建立索引会占用磁盘空间的索引文件. 一般情况这个问题不太严重, 但如果你在一个大表上创建了多种组合索引, 索引文件的会膨胀很快).
来源: http://www.bubuko.com/infodetail-2947435.html