索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。
B树索引
MySQL通过存储引擎取数据,基本上90%的人用的就是InnoDB 了,按照实现方式分,InnoDB的索引类型目前只有两种:BTREE(B树)索引和HASH索引。B树索引是MySQL数据库中使用最频繁的索引类型,基本所有存储引擎都支持BTree索引。通常我们说的索引不出意外指的就是(B树)索引(实际是用B+树实现的,因为在查看表索引时,MySQL一律打印BTREE,所以简称为B树索引)
查询方式:
1、 主键索引区:PI(关联保存的是数据的地址)按主键查询,
2、 普通索引区:si(关联的id的地址,然后再到达上面的地址)。所以按主键查询,速度最快
B+tree性质:
1、 n棵子tree的节点包含n个关键字,不用来保存数据而是保存数据的索引。
2、 所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身以关键字的大小自小而大顺序链接。
3、 所有的非终端结点可以看成是索引部分,结点中仅含其子树中的最大(或最小)关键字。
4、 B+树中,数据对象的插入和删除仅在叶节点上进行。
5、 B+树有2个头指针,一个是树的根节点,一个是最小关键码的叶节点。
哈希索引
简要说下,类似于数据结构中简单实现的HASH表(散列表)一样,当我们在MySQL中用哈希索引时,主要就是通过Hash算法(常见的Hash算法有直接定址法、平方取中法、折叠法、除数取余法、随机数法),将数据库字段数据转换成定长的Hash值,与这条数据的行指针一并存入Hash表的对应位置;如果发生Hash碰撞(两个不同关键字的Hash值相同),则在对应Hash键下以前表形式存储。当然这只是简略模拟图。
Was this helpful?
0 / 0