MySql之---索引

由于索引问题经常在面试中问到,今天对索引进行一个系统的总结。

一、是什么?

  索引是对数据库表中一列或多列的值进行排序的一种结构。是一个单独的、存储在磁盘上的数据库结构,包含着对数据库表里所有记录的引用指针。

二、优缺点

优点:

  通过创建唯一索引,可以保证数据库表中每一行数据的唯一性

  大大加快了查询速度

  在使用分组和排序子句进行数据查询时,可以减少查询中分组和排序的时间

缺点:

  创建和维护索引需要耗费时间

  索引占用额外的存储空间

  降低了插入、删除、更新的效率

三、分类

1、普通索引和唯一索引

  普通索引:允许在定义索引列中插入重复值和空值

  唯一索引:允许有空值,但值必须唯一 【主键索引不允许有空值】

2、单列索引和组合索引

  单列索引:一个索引只包含单列

  组合索引:表中多个字段组合上创建的索引,遵循最左前缀集合

3、全文索引

  定义:在定义索引的列上支持值的全文查找,允许插入重复值和空值

  适用范围:希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较。

  在使用全文索引的时候有几个注意事项:

  •  所包含的值的个数必须大于4个
  •  所包含的值的长度必须大于4个(最小搜索长度)

4、空间索引

  对空间类型的字段建立的索引

  空间类型:geometry、point、linestring、polygon

四、设计原则

1、并非越多越好:一个表中有大量索引不仅占用较大的磁盘空间,还会影响插入、删除、更新的性能

2、避免对经常更新的表进行过多的索引,并且索引中的列尽可能小

3、数据量小的表最好不要使用索引:查询花费的时间可能比遍历索引的时间还要短

4、在频繁进行排序或分组的列上建立索引

5、当唯一性是某种数据本身的特征时,指定唯一索引

五、面试中问到的一些问题

1、聚簇索引与非聚簇索引的区别

  (1)聚簇索引:并不是一种单独的索引类型,而是一种数据存储方式(B+树),将数据存储与索引放到了一块,找到索引也就找到了数据。

  (2)非聚簇索引:其叶子节点并不包含行记录的全部数据,除了包含键值外,还包含了相应行数据的聚簇索引键。

2、组合索引的最左前缀

  首先根据组合索引中最左边的、也就是第一个字段进行排序,在第一个字段排序的基础上,再对组合索引中后面的第二个字段进行排序,依此类推。

特性:

  对于联合索引,MySQL 会一直向右匹配直到遇到范围查询(> , < ,between,like)就停止匹配。比如 a = 3 and b = 4 and c > 5 and d = 6,如果建立的是(a,b,c,d)这种顺序的索引,那么 d 是用不到索引的,但是如果建立的是 (a,b,d,c)这种顺序的索引的话,那么就没问题,因为范围查询c是最后一个。
  = 和 in 可以乱序,比如 a = 3 and b = 4 and c = 5 建立 (a,b,c)索引可以任意顺序。
  如果建立的索引顺序是 (a,b)那么直接采用 where b = 5 这种查询条件是无法利用到索引的。

 

posted @ 2021-08-20 10:54  一帆小白  阅读(55)  评论(0编辑  收藏  举报