一、索引的定义
索引用来快速地寻找那些具有特定值的记录或者说索引就是一种加快查找数据的内部机制。
二、索引的分类索引有很多种:主键索引、唯一索引、普通索引、组合索引、辅助索引、聚集索引、覆盖索引、全文索引等等。
2.1、主键索引:主键索引必须是第一列,唯一标示一行记录,不允许重复值,也不允许有空值。(B树索引)
2.2、唯一索引:与主键索引的唯一区别就是唯一索引允许有空值。
2.3、普通索引: 这是最基本的索引,没有唯一性的说法。
2.4、组合索引:选择多于一列的元素组合成为索引,此索引整体具有唯一性。在查询条件中常用到多个组合列时,可使得这几列建立组合索引,可以直接取出数据,如果查询列都包含在组合索引中那么可以直接通过索引块查出数据,以此加快效率。组合索引生效:where第一条件必须是索引第一列方可生效。
2.5、辅助索引: 除了主键索引外的索引,叶节点不包括记录的整行数据,只包含主键个一个标签,这个标签可以帮助找到对应的行记录。
2.6、聚集索引:叶节点存储了整行数据,等同于主键,叶节点存储了整行数据。
2.7、覆盖索引:select不可以查询*(所有的),查询的列全部包含在索引列里,可直接取索引列数据,无需回表查询。减少io次数,可以成为特殊的辅助索引,不需要回表的辅助索引。
2.8、全文索引:在索引文档中查询某个关键字的时候建立索引,加快查询速度。
2.9、聚簇索引:叶子节点存储着(索引页)数据行。
2.10、非聚簇索引:叶子节点没有直接指向数据行。
2.11、索引不生效的情况下
(1)以%开头的LIKE查询语句,称为模糊匹配。
(2)OR左右的查询条件没有同时使用索引。
(3)组合索引的第一个where条件没有使用组合索引的第一个字段。
(4)mysql优化器认为全表扫描比使用索引快的情况下,就不使用索引。
(5)如果列类型是字符串,那么一定要在条件中将数据列使用引号包起来。
2.6、索引的优缺点
优点:
(1)通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
(2)可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
(3)可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
(4) 在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
(5) 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。