1、什么是索引?
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
能实现快速定位的一种存储结构,其设计思想是以空间换时间。
2、索引的分类
按【数据结构】分类:B+tree索引、Hash索引、Full-text索引。
按【物理存储】分类:聚簇索引(主键索引)将索引值和数据存储在一块、二级索引(辅助索引)只存储索引值和主键ID。
按【字段特性】分类:主键索引、唯一索引、普通索引、前缀索引。
按【字段个数】分类:单列索引、联合索引。
3、MySQL如何实现索引机制
在MySQL 中有不同的存储引擎比如像 InnoDB MyISAM Memory 等等每一种存储引在其内部实现索引机制的原理也有所不同。在 MySQL5.5 之后默认的就是 InnoDB ,并且是目前使用最广泛的MySQL数据引擎。
B树/B+树查找的复杂度是O(log2(N)),那么这也是InnoDB采用的数据结构,在查找效率上非常高。
MySQL中的 B+ 树,对经典的B+ 树结构进行了一个优化。在原基础上,叶子节点又增加了一条相邻叶子节点的指针。
插入题外话:
哈希表:哈希表通常是基于某种分类规则,为存储的数据进行分类,然后将他们存储在不同的索引下,这样我们在查询一个数据的时候,先拿到索引,然后找到哈希表中索引吻合的数据存储表,然后直接在这个表中查询即可,而不用再遍历所有数据,这就是哈希表的好处。
哈希表是一种计算机中常用的存储结构,其存储方式为索引存储。
红黑树是一个二叉搜索树,它在每个节点增加了一个存储位记录节点的颜色,可以是RED,也可以是BLACK;通过任意一条从根到叶子简单路径上颜色的约束,红黑树保证最长路径不超过最短路径的二倍,因而近似平衡(最短路径就是全黑节点,最长路径就是一个红节点一个黑节点,当从根节点到叶子节点的路径上黑色节点相同时,最长路径刚好是最短路径的两倍)。它同时满足以下特性:
- 节点是红色或黑色。
- 根是黑色。
- 叶子节点(外部节点,空节点)都是黑色,这里的叶子节点指的是最底层的空节点(外部节点),下图中的那些null节点才是叶子节点,null节点的父节点在红黑树里不将其看作叶子节点。
红色节点的子节点都是黑色。
红色节点的父节点都是黑色。 - 从根节点到叶子节点的所有路径上不能有 2 个连续的红色节点。
- 从任一节点到叶子节点的所有路径都包含相同数目的黑色节点。
4、索引的优缺点是什么?
介绍:
数据是存储在磁盘上的,操作系统读取磁盘的最小单位是块,如果没有索引,会加载所有的数据到内存,依次进行检索,加载的总数据会很多,磁盘IO多。
如果有了索引,会以某个列为Key创建索引,MySQL采用B+树结构存储,一方面加载的数据只有某个列和主键ID,另一方面采用了多叉平衡树,定位到指定某个列的值会很快,根据关联的ID可以快速定位到对应行的数据,所以检索的速度会很快,因为加载的总数居很少,磁盘IO少。
可见,索引可以大大减少检索数据的范围、减少磁盘IO,使查询速度很快,因为磁盘IO是很慢的,是由它的硬件结构决定的。
优点:
- 索引能够提高数据检索的效率,降低数据库的IO成本。
- 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性,创建唯一索引。
- 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
- 加速两个表之间的连接,一般是在外键上建立索引。
缺点:
- 需要占用物理空间,建立的索引越多需要的空间越大。
- 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
- 会降低表的增删改的效率,因为每次增删改索引需要进行动态维护,导致时间变长。
5、什么是哈希索引?
哈希索引 (hash index):基于哈希表实现。哈希索引通过Hash算法将数据库的索引列数据转换成定长的哈希码作为key,将这条数据的行的地址作为value一并存入Hash表的对应位置。
在MySQL中,只有Memeory引擎显式的支持哈希索引,这也是Memeory引擎表的默认索引结构,Memeory同时也支持B-Tree索引。
6、什么是联合索引,组合索引,复合索引?
单列索引 一个索引只包含了一个列,一个表里面可以有多个单列索引,但是这不叫组合索引。
组合索引 (联合索引 & 复合索引) 一个索引包含多个列。