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

 我来答
重庆新华电脑学校
2020-10-20 · 学动漫、设计、电竞、电商、短视频、软件等
重庆新华电脑学校
重庆新华电脑学校隶属于新华教育集团,经重庆市人力资源和社会保障局审批成立的重庆地区大规模IT人才教育基地。是国家信息化教育全国示范基地,中国IT教育十大影响力品牌学校。
向TA提问
展开全部

先从 MySQL 的基本存储结构说起,MySQL的基本存储结构是页(记录都存在页里边):

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

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

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

  • 以其他列(非主键)作为搜索条件:只能从最小记录开始依次遍历单链表中的每条记录。

  • 所以说,如果我们写select * from user where name = ‘张三’这样没有进行任何优化的sql语句,默认会这样做:

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

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

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

    使用索引之后

    索引做了些什么可以让我们查询加快速度呢?其实就是将无序的数据变成有序(相对):

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

    很明显的是:没有用索引我们是需要遍历双向链表来定位对应的页,现在通过 “目录” 就可以很快地定位到对应的页上了!(二分查找,时间复杂度近似为O(logn))

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

dcldcx

2020-10-20 · TA获得超过1.7万个赞
知道大有可为答主
回答量:1.7万
采纳率:83%
帮助的人:2632万
展开全部
索引信息简单且唯一,方便查找啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式