Mysql为什么添加索引可以提高查询速度,看完这篇就够了

文章来自:https://mbd.baidu.com/newspage/data/landingshare?pageType=1&isBdboxFrom=1&context=%7B%22nid%22%3A%22news_9471377609032075720%22%2C%22sourceFrom%22%3A%22bjh%22%7D

索引做了些什么可以让我们查询加快速度呢?

其实就是将无序的数据变成有序(相对)

 

Mysql为什么添加索引可以提高查询速度,看完这篇就够了_第1张图片

 

 

要找到id为8的记录简要步骤:

 

Mysql为什么添加索引可以提高查询速度,看完这篇就够了_第2张图片

 

 

很明显的是:没有用索引我们是需要遍历双向链表来定位对应的页,现在通过**“目录”**就可以很快地定位到对应的页上了!

其实底层结构就是B+树,B+树作为树的一种实现,能够让我们很快地查找出对应的记录。

参考资料:

  • Mysql索引

1.3索引降低增删改的速度

B+树是平衡树的一种。

平衡树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

如果一棵普通的树在极端的情况下,是能退化成链表的(树的优点就不复存在了)

 

Mysql为什么添加索引可以提高查询速度,看完这篇就够了_第3张图片

 

 

B+树是平衡树的一种,是不会退化成链表的,树的高度都是相对比较低的(基本符合矮矮胖胖(均衡)的结构)【这样一来我们检索的时间复杂度就是O(logn)】!从上一节的图我们也可以看见,建立索引实际上就是建立一颗B+树。

  • B+树是一颗平衡树,如果我们对这颗树增删改的话,那肯定会破坏它的原有结构
  • 要维持平衡树,就必须做额外的工作。正因为这些额外的工作开销,导致索引会降低增删改的速度

哈希索引

除了B+树之外,还有一种常见的是哈希索引。

哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快

  • 本质上就是把键值换算成新的哈希值,根据这个哈希值来定位

 

Mysql为什么添加索引可以提高查询速度,看完这篇就够了_第4张图片

 

  • 哈希索引也没办法利用索引完成排序
  • 不支持最左匹配原则
  • 在有大量重复键值情况下,哈希索引的效率也是极低的---->哈希碰撞问题。
  • 不支持范围查询

你可能感兴趣的:(mysql)