mysql之 MyISAM & INNODB区别, 以及聚集索引非聚集索引

MyISAM 的主索引(聚簇索引)和辅助索引(非聚簇索引):

 

 

 

innoDB的主索引和辅助索引:

 

 

如果查询语句涉及内容,非聚集索引没有,并且用非索引列作为查询条件,则先从非聚簇索引树开始查找,然后找到聚簇索引后。根据聚簇索引,在聚簇索引的B+树上,找到完整的数据!如下图所示:

但是如果执行语句是  select name from table where name='lisi' 可以直接从非聚簇索引树获取,就不用再去聚集索引树查找了

 

 

 

 

 

 

 

 

 

 

 

 

 

MyISAM更是索引和文件分离,B+树的叶子结点的数据域存放的是文件内容的地址,主索引和辅助索引的B+树都是如此,那么如果我改变了一个地址,是不是所有的索引树都得改变,正如前面我们讲的在磁盘上频繁的读写操作是效率很低的,而这块又不适用局部原理,因为逻辑上相邻的结点,物理上不一定相邻,那么这样就会造成效率上的降低

InnoDB就产生了,它让除了主索引以外的辅助索引的叶子结点的数据域都保存主键,先通过辅助索引找到主键,然后通过主键找到叶子结点的所有数据,听起来貌似很麻烦,遍历了两棵树,但是,这样如果有了修改的话,改变的只是主索引,其它辅助索引都不用动,而且,数据库中的树的每一个结点的key可不是咱们给的那么少,试想如果一个结点有1024个key,那么高度为2的B+树都有1024*1024个key,所以一般树的高度都很低,所以,遍历树的消耗几乎忽略不计 

————————————————
版权声明:本文为CSDN博主「John__xs」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bitboss/article/details/53219945

 

posted @ 2021-08-29 22:31  6000a  阅读(229)  评论(0)    收藏  举报