开发者社区> 问答> 正文

为什么索引能提高查询速度?

为什么索引能提高查询速度?

展开
收起
pandacats 2019-12-23 10:27:09 948 0
1 条回答
写回答
取消 提交回答
  • 先从 MySQL 的基本存储结构说起:

    MySQL的基本存储结构是页 (记录都存在页里边) : image.png image.png

    各个数据页可以组成一个双向链表

    每个数据页中的记录又可以组成一个单向链表:

    每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录。

    所以说,如果我们写

    image.png

    这样没有进行任何优化的sql语句,默认会这样做:

    定位到记录所在的页:需要遍历双向链表,找到所在的页

    从所在的页内中查找相应的记录:由于不是根据主键查询,只能遍历所在页的单链表了

    很明显,在数据量很大的情况下这样查找会很慢!这样的时间复杂度为O(n)。

    索引做了些什么可以让我们查询加快速度呢?其实就是将无序的数据变成有序(相对): image.png 要找到id为8的记录简要步骤:image.png 很明显的是:没有用索引我们是需要遍历双向链表来定位对应的页,现在通过 “目录” 就可以很快地定位到对应的页上了!(二分查找,时间复杂度近似为O(logn))

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

    2019-12-23 10:28:46
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
RowKey与索引设计:技巧与案例分析 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载