索引之innodb和myisam

innodb和myisam的diff:

  参考文章:https://www.cnblogs.com/sfzlstudy/p/15944832.html

 

what:

  myisam

    索引文件和数据文件是分开的。索引文件中叶子结点的data部分,仅仅是数据记录的地址。它的主索引和辅助索引在结构上没有区别,数据上主索引的key是唯一的,辅助索引上的key可以重复。

    

    主索引

      是B+树,叶节点的data域存放的是数据记录的地址。结构如下图:

      

 

      上图中Col1为主键,即该“Primary key”索引就是主索引。

  

    辅助索引:

      辅助索引和主索引结构没有区别,只是辅助索引的key可以重复。Col2上建立一个辅助索引,则此索引的结构如下图所示:

      

 

 

  innodb

    主索引和数据文件是在一起的,即聚集索引。 辅助索引的叶子节点的data域存放的是主键值(即key)辅助索引查询需要二次索引,即先辅助索引找到主键的key,然后到主索引中,再找对应的数据。

 

    主索引

      InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。

      

 

       InnoDB主索引(同时也是数据文件)的示意图,可以看到叶节点包含了完整的数据记录。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键。

 

    辅助索引

      所有辅助索引都引用主键(key)作为data域。例如,下图为定义在Col3上的一个辅助索引:

      

 

 

    特性

      1、主键Key尽量不要大。原因:所有的辅助索引都会引用主索引的key,如果主key设计的过大,那么辅助索引也会很大。

      2、主键Key尽量单调。原因:InnoDB数据文件本身是一颗B+Tree,非单调的主键会造成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效。因此使用自增字段作为主键则是一个很好的选择(默认id就是单增)。

 

posted @ 2022-02-28 13:08  修心而结网  阅读(48)  评论(0编辑  收藏  举报