InnoDB 和 MyISAM的区别
程序员文章站
2022-05-24 14:14:13
...
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,可变列不包括在65535之中,并且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的区别
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,可变列不包括在65535之中,并且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)存储在其他外部页。
上一篇: Rails 3.2 RC1 发布
下一篇: 获取系统时间 让时间动起来
推荐阅读
-
HashMap和Hashtable及HashSet的区别 博客分类: javanet
-
post和get的区别 博客分类: java
-
详解JRE和JDK的区别 博客分类: Java JDKJava应用服务器企业应用浏览器
-
URI和URL的区别 博客分类: 其它 URIURLprotocolhostport
-
MySQL的btree索引和hash索引的区别(转载) 博客分类: 数据库 数据库索引btreehash
-
HttpServletRequest和ServletRequest的区别 博客分类: web容器 HttpServletRequestServletRequest区别
-
ArrayBlockingQueue和LinkedBlockingQueue的区别
-
python的while循环和for循环的应用区别
-
for,while循环的特点和区别
-
Lua中pairs和iparis的区别