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)存储在其他外部页。
InnoDB 和 MyISAM的区别
猜你喜欢
转载自ncs123.iteye.com/blog/2396766
今日推荐
周排行