mysql索引原理

时光怂恿深爱的人放手 提交于 2020-02-12 04:40:05

为什么要使用索引?使用索引有什么优点和缺点?

          使用索引是为了使我们查询变得更快。使用索引如果我们对数据进行修改或者删除那么他的索引也要随之改变,所以使用索引就会降低我们修改删除的效率。

 

mysql有几种索引类型?

           普通索引:这一类索引可以创建在任何数据类型中,没有限制。

           唯一索引:创建该类索引时,需要保证创建索引的那一列值是唯一的。

           全文索引:全文索引只能创建在CHAR,VARCHAR,TEXT类型的字段上,主要是为了提高查询较大字符串的查询速度,只有MyISAM存储引擎支持

           单列索引:在表中给单个列创建索引,单列索引可以是普通索引,唯一索引,全文索引

           多列索引:在同一张表的多个列上创建索引

 

索引为什么会使查询效率大大提高?

          mysql默认使用的是B+树的数据结构。

          索引:排好序的数据结构,类似于书的目录,我们可以通过一本书的目录,快速查找到我们需要的内容,而不需要一页一页的去查看。

 

mysql索引数据结构为什么要默认使用B+树,而不使用其他的数据结构?

          据我了解的数据结构有,二叉树,红黑树,B树,B+树 (他们都有一个共同的特点,就是右边的数据一定都比左边的小)

          二叉树:

             以上两组数据虽然数字是一样的但是他们的顺序不一样,所以构建出来的二叉树不一样,通过上面这张图可以看出来,如果如果数据是从大到小或者是从小到大的顺序插入,这样会导致二叉树变为链表数据结构,链表查询效率比较慢,而且如果当我们表中有几百万条数据的时候,这个数会变得很高,我们查询的时候,每一个节点都要进行一次io读取,而这个效率肯定是不高的,所以不适用作为数据库索引的数据结构。

 

         红黑树(二叉平衡树)

            两组同样的数据用红黑树构建出来的结构不一样,因为红黑树会自动平衡保证节点左右两边数量一样,这样就避免出现链表那种情况了,但是当数据量多时查询速度还是慢。

 

         B树

         

             通过查看上图我们可以发现B树的特点是他每一个节点可以存储多个元素,在同样的数据下我们使用B树构建的数据结构就没有红黑树构建数据结构那么高了,可能有人会问为什么不把全部数据放在一个节点中,这样读取一次不就行了吗?可是电脑的内存是有限的,如果一次读取太多会造成内存溢出,mysql默认每一个节点存储16kb大小。

 

          B+树 

          

            B+树是通过B树改造而来的,他和B树有什么不同呢 ?

                  1.B+树有重复的索引

                  2.B+树叶子节点都记录着右边的叶子节点

            B+树为什么会有重复索引?

                  在MySQL中B+树他的子节点是不保存数据的地址值的,因为这样就可以节约每一个子节点的空间,每一个子节点可以存储更多的节点,使构建出来的数据结构不会太高。

            B+树叶子节点为什么都记录着右边的叶子节点?

                     当在进行范围查询时,只需要第一次从根节点往下面查,然后再根据叶子节点记录着右边的叶子节点的这一特性,快速的查询到,指定范围的值。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!