欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 和 MyISAM的区别
            
    
    博客分类: mysql InnoDBMyISAM区别索引聚簇索引 


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

   自增主键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的区别
            
    
    博客分类: mysql InnoDBMyISAM区别索引聚簇索引 
  • 大小: 139.4 KB
  • InnoDB 和 MyISAM的区别
            
    
    博客分类: mysql InnoDBMyISAM区别索引聚簇索引 
  • 大小: 101 KB