作者:保佑麻木_711 | 来源:互联网 | 2023-07-17 15:40
mysql数据库文件InnoDB和MyISAM的区别Innodb隔离级别原理实现InnoDB主备复制binlog和redolog一致性一、InnoDB和MyISAM的区别1.MyI
- mysql数据库文件
- InnoDB 和 MyISAM的区别
- Innodb隔离级别原理实现
- InnoDB主备复制
- binlog 和 redo log一致性
一、InnoDB 和 MyISAM的区别
1. MyISAM使用前缀压缩技术使得索引更小,InnoDB则按照原数据格式进行存储。
2. MyISAM索引通过数据的物理位置引用被索引的行,而InnoDB则根据主键引用被索引的行。InnoDB在移动时无须更新二级索引中的这个“指针”,但是使用主键值作为指针会让二级索引占用更多空间。
3. MyISAM主键索引是B+Tree + 唯一非空索引。InnoDB主键索引是B+Tree + 聚簇索引。聚簇索引:主键为索引,叶子节点包含索引和行数据。
4. MyISAM对整张表加锁(表锁),InnoDB有行级锁。
5. MyISAM自身只缓存索引(依赖操作系统缓存数据,设置适当的健缓存,留足够的内存给操作系统)。InnoDB缓存索引和数据(缓存池应最大化)。
6. MyISAM不支持事务,InnoDB支持事务。
二、索引
索引是在存储引擎层而不是服务器层实现的。
聚簇索引:并不是一种单独的索引类型,而是一种数据存储方式。叶子页包含索引和行数据。InnoDB通过主键聚集数据,如果没有主键,InnoDB会选择一个唯一的非空索引替代。
自增主键ID顺序插入性能高,UUID主键ID随机I/O,频繁页分裂操作,数据碎片化。UUID适用于分布式数据库,防止自增主键主键冲突。
三、Innodb索引结构
- Innodb索引是B-tree数据结构。
- Innodb索引至少包括两个segment,一个用来存储非叶子节点数据,另一个存储叶子节点数据。
- segment由page组成,每个page的page size默认为16K,通过innodb_page_size配置参数可以设置其他值:8k,32k。默认会预留1/16的page_size为将来的索引行变更和修改,可以通过参数innodb_fill_factor变更默认配置。
- mysql最大行长度限制为65535,可变列不包括在65535之中,并且charset有关,比如utf8,最大长度为65535/3。最大行数据大小包括可变列(VARCHAR,VARBINARY,BLOB,TEXT)为4G。
- mysql最大行长度最好不要超过1/2的page size,如果一行数据没有超过1/2 page size,那么这行数据全部存储在同一页。如果超过1/2 page size,那么可变列(VARCHAR,VARBINARY,BLOB,TEXT)存储在其他外部页。