什么是索引
索引简单来说就类似字典,想想我们小时候在中华字典怎么查某个字。索引的作用就是快速找出在某个列中有一特定值的行。
例如:有一张user表,其中有万条记录,记录着万个人的信息。有一个Phone的字段记录每个人的电话号码,现在想要查询出电话号码为xxxx的人的信息。
如果没有索引,那么将从表中第一条记录一条条往下遍历,直到找到该条信息为止。
假如有了索引,那么会将该Phone字段,通过一定的方法进行存储,好让查询该字段上的信息时,能够快速找到对应的数据,而不必在遍历万条数据。
索引的存储类型
MySQL索引的存储类型有:BTREE、HASH。
B-Tree
B-Tree索引是目前关系型数据库中查找数据最为常用和有效的索引,大多数存储引擎都支持这种索引。
InnoDB聚簇索引
聚簇索引保证关键字的值相近的元组存储的物理位置也相同(所以字符串类型不宜建立聚簇索引,特别是随机字符串,会使得系统进行大量的移动操作),且一个表只能有一个聚簇索引。
因为由存储引擎实现索引,所以,并不是所有的引擎都支持聚簇索引。
优点:
1、所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引
2、大大加快数据的查询速度
缺点
1、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加
2、索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值
3、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。