1   索引是什么?索引数据结构有哪些?

在数据库中用sql创建复合索引 mysql复合索引数据结构_在数据库中用sql创建复合索引

在数据库中用sql创建复合索引 mysql复合索引数据结构_在数据库中用sql创建复合索引_02

1、索引是帮助MySQL高效获取数据的数据结构,可以将其类比成英语字典的目录,当我们要查找某个词时,通过目录(索引)定位到M,再定位y,以此类推找到SQL。如果没有目录,我们需要从整本字典中从头查找,对应的,数据库也是如此,没有了索引,就需要从整个表进行查找。

2、哈希索引、平衡二叉树索引、B树索引、B+树索引等等。

在数据库中用sql创建复合索引 mysql复合索引数据结构_在数据库中用sql创建复合索引_03

在数据库中用sql创建复合索引 mysql复合索引数据结构_数据结构_04

在数据库中用sql创建复合索引 mysql复合索引数据结构_二叉树_05

 2   哈希索引?

在数据库中用sql创建复合索引 mysql复合索引数据结构_二叉树_06

在数据库中用sql创建复合索引 mysql复合索引数据结构_二叉树_07

1、hash索引不能使用范围查询,只能用于等值过滤。

2、hash索引不能利用部分索引键查询,对于复合索引,hash索引在计算hash值时,是组合索引键后再一起计算hash值,而不是单独计算hash值。

3、不能避免表扫描。hash索引是索引键通过hash运算之后,将hash值放hash表中,由于不同的索引键存在相同的hash值,所以无法从hash索引中直接完成查询。

在数据库中用sql创建复合索引 mysql复合索引数据结构_数据结构_08

在数据库中用sql创建复合索引 mysql复合索引数据结构_链表_09

在数据库中用sql创建复合索引 mysql复合索引数据结构_链表_10

 3   平衡二叉树索引?

在数据库中用sql创建复合索引 mysql复合索引数据结构_mysql_11

在数据库中用sql创建复合索引 mysql复合索引数据结构_在数据库中用sql创建复合索引_12

1、树的高度过高,高度越高,查找速度越慢。

2、支持范围查找,但是需要再进行回旋查找

在数据库中用sql创建复合索引 mysql复合索引数据结构_数据结构_13

在数据库中用sql创建复合索引 mysql复合索引数据结构_数据结构_14

在数据库中用sql创建复合索引 mysql复合索引数据结构_数据结构_15

 4   B树索引?

在数据库中用sql创建复合索引 mysql复合索引数据结构_mysql_16

在数据库中用sql创建复合索引 mysql复合索引数据结构_链表_17

B树与二叉树最大的区别在于:它的一个节点可以存储两个值,这就意味着它的树的高度比二叉树更低,查询速度就更快。但是呢,它在进行范围查找的时候仍然存在回旋查找的问题。

在数据库中用sql创建复合索引 mysql复合索引数据结构_在数据库中用sql创建复合索引_18

在数据库中用sql创建复合索引 mysql复合索引数据结构_数据结构_19

在数据库中用sql创建复合索引 mysql复合索引数据结构_二叉树_20

 5   B+树索引?

在数据库中用sql创建复合索引 mysql复合索引数据结构_在数据库中用sql创建复合索引_21

在数据库中用sql创建复合索引 mysql复合索引数据结构_mysql_22

B树升级版,与B树相比,新增了叶子节点与非叶子节点关系。所有相邻的叶子节点包含非叶子节点,使用链表进行结合,有一定顺序排序,从而范围查询效率高。比如我们要查询大于5的数据,首先我们定位5的位置,然后直接将5后面的数据全部拿出来即可,因为这是有序链表。

在数据库中用sql创建复合索引 mysql复合索引数据结构_二叉树_23

在数据库中用sql创建复合索引 mysql复合索引数据结构_二叉树_24

在数据库中用sql创建复合索引 mysql复合索引数据结构_链表_25