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.索引的使用
1 #方法一:创建表时 2 CREATE TABLE 表名 ( 3 字段名1 数据类型 [完整性约束条件…], 4 字段名2 数据类型 [完整性约束条件…], 5 [UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY 6 [索引名] (字段名[(长度)] [ASC |DESC]) 7 ); 8 9 10 #方法二:CREATE在已存在的表上创建索引 11 CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 12 ON 表名 (字段名[(长度)] [ASC |DESC]) ; 13 14 15 #方法三:ALTER TABLE在已存在的表上创建索引 16 ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 17 索引名 (字段名[(长度)] [ASC |DESC]) ; 18 19 #删除索引:DROP INDEX 索引名 ON 表名字;
5.关于使用索引的优缺点
优点:
1)建立索引可以大大提高检索的数据,以及减少表的检索行数
2)在表连接的连接条件 可以加速表与表直接的相连
3)在分组和排序字句进行数据检索,可以减少查询时间中 分组 和 排序时所消耗的时间(数据库的记录会重新排序)
4)建立索引,在查询中使用索引 可以提高性能
缺点:
1)创建和维护索引的时候,会消耗时间
2)创建出来的索引会占据一定的物理空间
3)当对表的数据进行 INSERT,UPDATE,DELETE 的时候,索引也要动态的维护,这样就会降低数据的维护速度,(建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快)。