InnoDB常见索引简介

一、索引分类

        1、B+树索引

        2、哈希索引

        3、全文索引

二、详细介绍索引

   一、B+树索引

  1.  聚集索引/聚簇索引
    将表的主键构造为一颗B+树,并将表的行记录存放在B+树的叶子结点上,聚集索引是由mysql自己根据主键创建的索引,如果表中没有主键会根据rowid创建聚集索引。
     

    聚集索引B+图示
  2.  辅助索引/二级索引 
    叶子结点不包含行的全部数据,只存放了行的id。
     

    辅助索引图示

     

  3.  联合索引
    以多个列共同创建索引,叶子结点中包含创建索引的列数据和主键id。联合索引的查询需要遵循最左前缀原则,否则索引失效。最左前缀原则:需要根据创建索引的顺序进行查询,即查询的列要以从左到右的顺序。如下图中,由于索引b的排序是以索引note为基础的,若只以索引列b为查询条件,索引列b中的数据是乱序的,并不查询到准确的数据。

    联合索引图示

     

  4. 回表查询
    非聚集索引的叶子结点上并没有存放行的全部数据,只包含建立索引的列数据,若获取的列不在索引的叶子结点中,会进行回表查询。回表查询是根据叶子结点上的主键id,在聚集索引中查询全部数据。
     

    回表查询图示
     

  5. 覆盖索引
    覆盖索引是指可以在辅助索引中得到查询的记录,不需要回表查询,以增加查询效率。 

  二、Hash索引

        mysql会自动建立自适应Hash存放热点数据,提高查询效率。

三、思考

        1、回表查询会进行两次查询操作,为什么不在非聚集索引的叶子结点上存放全部行数据呢?

                答:每个索引上都存放全部数据,会浪费磁盘空间

        2、走索引的查询效率一定比不走索引高吗?

                答:不一定、如果表中数据量较少,且走了回表查询,效率可能会低于全表扫描,不过MySQL的查询优化器会选择是否走索引,以达到最大查询效率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值