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

本文探讨了MySQL数据库中索引的作用,解释了为何使用索引能显著提高查询速度。通过介绍数据页、双向链表和页目录的概念,阐述了无索引时按非主键搜索的低效。接着,讲解了索引如何通过B+树结构实现快速定位,将查询时间复杂度降低。此外,文章强调了最左前缀原则在联合索引中的应用,并提醒避免冗余索引以优化数据库性能。最后,列举了为表字段添加各种类型索引的方法。
摘要由CSDN通过智能技术生成

先从 MySQL 的基本存储结构说起

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

 

 

  • 各个数据页可以组成一个双向链表
  • 每个数据页中的记录又可以组成一个单向链表每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录
  • 以其他列(非主键)作为搜索条件:只能从最小记录开始依次遍历单链表中的每条记录。

所以说,如果我们写select * from user where indexname = 'xxx'这样没有进行任何优化的sql语句,默认会这样做:

  1. 定位到记录所在的页:需要遍历双向链表,找到所在的页
  2. 从所在的页内中查找相应的记录:由于不是根据主键查询,只能遍历所在页的单链表了

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

使用索引之后

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值