创建更好的MySQL索引


在上一次中我们已经讨论过单列索引和多列索引,接下来我们来看看 覆盖索引局部列索引.

更好的索引

在这里插入图片描述

覆盖索引

覆盖索引是多列索引中的一种
如果我们想查询所有在1969年出道的艺人名字,可以运行下面的查询:
在这里插入图片描述
这个表有大约500000行数据,在没有索引的情况下查询需要耗时190毫秒.
我们给这个表加一个索引:
在这里插入图片描述
加了单列索引后查询耗时减少到5.9毫秒,比原来提高了97%的速度
但是我们还可以更快:
在这里插入图片描述在这里插入图片描述
使用多列索引后,查询执行只需要1.2毫秒
多列索引导致的性能提升绝不是因为额外增加的列限制了访问的行数.
我们可以发现Extra这一列中显示了using index.
在这里插入图片描述
在innoDB中,主码的值会被附加在非主码索引的每个对应记录后面,因此没有必要在非主码索引中指定主码.
也就是说:primary key就是隐藏的索引,不需要手动创建的.
在这里插入图片描述
在这里插入图片描述

存储引擎的含义

对于innoDB引擎而言,非主码索引使用了主码的实际值而不是指向底层数据行的指针.myisam使用了一种B-树索引的不同的实现方式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
也就是说,在myisam引擎下主键artist_id不会再自动添加索引.

局部索引

索引可以用来限制需要查询的行数,但是一行是具有多列的,如果我们能减少列的扫描,那就能够实现进一步优化,我们可以创建具有更小宽度的小型索引.在这里插入图片描述
现在添加一个索引:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值