五分钟搞懂mysql索引

索引

聚簇索引:能确定数据存储顺序的一种索引;

非聚簇索引:索引的逻辑顺序与磁盘上行的物理存储顺序不同;

mysql中主索引聚簇索引就是主键或者非空唯一列,如果这些都没有就会使用内部的rowid列作为聚簇索引。

主索引:一般认为只有主键才是主索引;

辅助索引:也叫二级索引,主索引外的都是辅助索引;

innodb里聚簇索引就是主索引,其他都是辅助索引;myisam里就没有聚簇索引这一说了,所以如果定义了主键就是主索引,其他索引是辅助索引;

存储

innodb:1.innodb 必须有聚簇索引;

              2.聚簇索引是B+tree实现,数据存储在聚簇索引的叶子节点;

              3.非聚簇索引也是B+tree实现,存储的是聚簇索引的值;

myisam :1.myisam的索引都是非聚簇索引;

                 2.索引也都是B+tree实现的,叶子节点存储的是数据行的物理地址;

                 3.主索引跟辅助索引没有什么区别;

接下来放几张别人的图

myisam的主键索引图: myisam的主键索引跟辅助索引没区别 所以一张图代表了

 

innodb的主键索引跟辅助索引图:

对比总结

1.innodb的聚簇索引存储了实际数据,所以根据聚簇索引查询会非常快。

   但是辅助索引存储的是主键索引的值,所以需要去聚簇索引里再查一遍,这就是“回表”,

   避免回表的办法就是“索引覆盖” ,即给查询字段建立联合索引,这样辅助索引里就能包含要查询的所有字段,就不需要再回表;

2.innodb里由于辅助索引存储的是聚簇索引的值,所以聚簇索引不宜过大;另外聚簇索引最好选择整型自增主键实现,这样可以保证数据的顺序插入,避免频繁页分裂;

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值