如何理解MySQL的底层中数据结构索引MyISAM和InnoDB的区别?

(一)先对MyISAM和InnoDB有一个简单的对比认识

1. MyIsam是非聚集索引(其实MyIsam引擎就是索引和数据分离的索引单独放在一个XX.MYI文件中,数据单独放在一个XX.MYD文件中),InnoDB就是聚集索引(其实就是他的数据和索引就是在一个XX.IDB文件中),或者说MyIsam他寻找索引的时候可以直接定位到索引就可以拿到数据,但是InnoDB就不行,他只能去BTree的叶子节点中去拿到数据
如何理解MySQL的底层中数据结构索引MyISAM和InnoDB的区别?_第1张图片

如何理解MySQL的底层中数据结构索引MyISAM和InnoDB的区别?_第2张图片

1).[事务]MyISAM是非事务安全型的,而InnoDB是事务安全型的,默认开启自动提交,宜合并事务,一同提交,减小数据库多次提交导致的开销,大大提高性能。
2).[]MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
3).[全文索引]MyISAM支持全文类型索引,而InnoDB不支持全文索引。
4).[查询效率]MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
5).[外健]MyISAM不支持外健,InnoDB支持。
6).[count]MyISAM保有表的总行数,InnoDB只能遍历。6).MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
7).InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)

总结:两种索引的引擎方式都是支持B+Tree的底层实现方式的

(二)聊一下InnoDB的优点

因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。

参考文章:https://blog.csdn.net/silyvin/article/details/79332879
http://blog.codinglabs.org/articles/theory-of-mysql-index.html

你可能感兴趣的:(【数据库】)