索引是怎么提升查询效率的?

innoDb每次进行磁盘读取的数据量是固定的,为16kb。索引的作用是:让每一次读取出来的数据尽可能包含我们所需要的数据,从而减少磁盘的访问次数。

比如说现在有一张表user(id,name,age,phone),里面有160条数据每条数据占了2kb,name这个字段大小为0.5kb,name='jack'的记录的主键id=72;并且如果按照字母顺序对name这一列进行排序,那么jack是最后一条记录。我现在要查找name='jack'的数据。

现在我们来看看有索引和没有索引的情况下,操作系统对磁盘的访问次数:

先看没有给name字段加索引:

这个时候操作系统从磁盘上读出来的数据是:八条包含user所有字段的记录。jack在第72行,那么数据库需要读9次磁盘,读出第72条数据。最终读取到name='jack'的记录读了9次磁盘。

再看看给name字段加上索引:

这个时候操作系统第一次从磁盘读出来的数据是:32个name。这个时候jack在第160行,操作系统需要读5次磁盘,读出160条name的数据。最后拿着name这条数据指向的内存地址,再读一次磁盘,把jack的所有字段读出来。最终读取到name='jack'的记录读了6次磁盘。

相比之下,加上索引少读了三次磁盘,假设innoDb读一次磁盘用时1秒,那么同一个sql,加上索引可以减少3秒钟的执行时间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值