索引用于快速找到某个列有一特定值的行

索引的含义

索引是一个单独的、存储在磁盘中的数据结构,它包含了数据表中所有数据的引用指针。
每个存储引擎的索引都不一定完全相同,也不一定支持所有索引类型。
mysql的索引的存储类型有两种BTREE和HASH。
MyISAM和InnoDB存储引擎只支持BTREE索引,MEMORY/HEAP支持BTEREE和HASH索引。

索引的优点

1、通过创建唯一索引,可以保证数据库表中每一行数据的唯一性
2、可以大大加快查询速度
3、在实现数据参考完整性方面,可以加速表与表之间的连接
4、在使用分组和排序子句进行数据查询时,显著减少耗时
索引的缺点:
1、创建索引和维护索引需要耗费时间,并且随着数据量的增加,耗时也会增加
2、索引需要占磁盘空间
3、当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,降低了数据维护的速度

索引的分类

普通索引和唯一索引

普通索引是mysql的基本索引类型,允许在索引列中插入空值、重复值
唯一索引,索引列值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。主键索引是一种特殊的唯一索引,不允许有空值

单列索引和组合索引

单列索引即一个索引只包含单个列,一个表可以有多个单列索引。
组合索引指在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才被使用。使用组合索引时遵循左前缀集合。

全文索引

全文索引类型为FULLTEXT,在定义索引的列上支持值的全文查找,允许在索引列中插入空值和重复值。
全文索引可以在CHAR、VARCHAR、TEXT类型的列创建
Mysql中只有MyISAM存储引擎支持全文检索

空间索引

空间索引是对空间数据类型建立的索引,只能在MyISAM存储引擎使用。

索引的设计原则

1、索引并非越多越好,过多的索引会占用磁盘空间,还会影响INSERT、UPDATE、DELETE的性能
2、避免对经常更新的表进行过多的索引,并且索引的列尽可能少。而对经常查询的字段应该创建索引,但要避免添加不必要的字段。
3、数据量小的表最好不要使用索引,由于数据较少,索引没有优化效果。
4、在条件表达式中经常用到的不同值较多的列上建立索引,在不同值很少的列不要建立索引
5、当唯一性是某种数据本身的特征时,指定唯一索引。使用唯一索引能确保定义的列的数据完整性,以提高查询效率。
6、在频繁进行排序或者分组的列上建立索引,如果待排序的列有多个,可以建立组合索引。