MyISAM:
表级锁、不支持事务,支持全文索引。
存储结构上:
三个文件,'.frm'-表结构文件,'.MYD'-数据文件,‘.role’-索引文件,非聚集索引 。
主键索引结构:通过对col1建立主键索引,会从索引文件找到索引节点,再通过索引节点上的文件指针到数据文件中,定位具体的数据。
辅助索引结构:与主键索引结构上并无任何区别,主键Key不可重复,辅助索引则可重复。
InnoDB:
行级锁、事务安全(ACID兼容)、支持外键,5.6.4后也支持全文索引。
存储结构上:
2个文件,'.frm'-表结构文件',‘,ibd’-索引和数据文件,聚集索引。
主键索引结构:
由于InnoDB的文件中存放了索引和数据,所以可以通过索引直接拿到数据。因此,InnoDB必须有主键索引(不推荐uuid,字符串类型匹配慢)
原因:
uuid,在磁盘中存储是不连续的。重新添加的时候,为了维护B+树的结构,会破坏左侧子树的结构,进行结构的重构,消耗更多的时间。
辅助索引:
与主键索引不同的是,它的data部分不是完整的数据记录,存储的是对应到主键的数据的索引,所以辅助索引查询数据时,会走两边拿到数据(节省空间,数据一致性)。
总结:
在使用上,当数据量大,cpu数据多的情况下,使用InnoDB,因为InnoDB在吞吐量上的提高明显,本身也是为了大数据而设计使用的,在数据量更新次数少,cpu少,且查询频繁,或者经常需要确定表内数据总数的情况下时,使用MyISAM索引结构。