InnoDB 和 MyISAM的区别

mysql数据库文件
InnoDB 和 MyISAM的区别
Innodb隔离级别原理实现
InnoDB主备复制

一、InnoDB 和 MyISAM的区别

1. MyISAM使用前缀压缩技术使得 索引更小,InnoDB则按照原数据格式进行存储。
2. MyISAM索引通过数据的 物理位置引用被索引的行,而InnoDB则根据 主键引用被索引的行。InnoDB在移动时无须更新二级索引中的这个“指针”,但是使用主键值作为指针会让二级索引占用更多空间。
3. MyISAM主键索引是 B+Tree + 唯一非空索引。InnoDB主键索引是 B+Tree + 聚簇索引。聚簇索引:主键为索引,叶子节点包含索引和行数据。
4. MyISAM对整张表加锁( 表锁),InnoDB有 行级锁
5. MyISAM自身只缓存索引( 依赖操作系统缓存数据,设置适当的健缓存,留足够的内存给操作系统)。InnoDB缓存索引和数据(缓存池应最大化)。


二、索引



    索引是在 存储引擎层而不是服务器层实现的。
    聚簇索引:并不是一种单独的索引类型,而是一种数据 存储方式。叶子页包含索引和行数据。InnoDB通过 主键聚集数据,如果没有主键,InnoDB会选择一个唯一的非空索引替代。

   自增主键ID顺序插入性能高,UUID主键ID随机I/O,频繁页分裂操作,数据碎片化。UUID适用于分布式数据库,防止自增主键主键冲突。

三、Innodb索引结构
    1. Innodb索引是B-tree数据结构。
    2. Innodb索引至少包括两个segment,一个用来存储非叶子节点数据,另一个存储叶子节点数据。
    3. segment由page组成,每个page的page size默认为16K,通过innodb_page_size配置参数可以设置其他值:8k,32k。默认会预留1/16的page_size为将来的索引行变更和修改,可以通过参数innodb_fill_factor变更默认配置。
    4. mysql最大行长度限制为 65535可变列不包括在65536之中,并且charset有关,比如utf8,最大长度为65535/3。最大行数据大小包括可变列(VARCHAR,VARBINARY,BLOB,TEXT)为 4G
    5. mysql最大行长度最好不要超过 1/2的page size,如果一行数据没有超过1/2 page size,那么这行数据全部存储在同一页。如果超过1/2 page size,那么可变列(VARCHAR,VARBINARY,BLOB,TEXT)存储在其他外部页。

猜你喜欢

转载自ncs123.iteye.com/blog/2396766