美文网首页
MyISAM 和InnoDB

MyISAM 和InnoDB

作者: Z_aa67 | 来源:发表于2019-08-20 16:55 被阅读0次

两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁。而MyISAM不支持。
◆1.InnoDB不支持FULLTEXT类型的索引。
◆2.InnoDB 中不保存表的具体行数,执行select count() from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含 where条件时,两种表的操作是一样的。
◆3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
◆4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
◆5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
◆6.InnoDB表的行锁不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
◆7.select count(*) 和order by 操作Innodb其实也是会锁表的,Innodb是行级锁只是where对它主键是有效,非主键的都会锁全表的。
◆8.MyISAM的读性能是比Innodb强。
◆9. MyISAM的索引和数据是分开的,并且索引是有压缩的,提高内存使用率。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。
◆10. 迁移数据,备份还原,MyISAM只要对应表的frm.MYD,MYI的文件,在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,但是sql文件一般比较大。

myisam和innodb索引实现
MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。
MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。MyISAM的索引方式也叫做“非聚集”的,与InnoDB的聚集索引区分。

InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。
InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。叶节点包含了完整的数据记录。这种索引叫做聚集索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有)。
InnoDB的辅助索引data域存储相应记录主键的值而不是地址。不建议使用过长的字段作为主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。

InnoDB适用场景
1.需要事务的操作;
2.更新数据需要使用行级锁;
3.大数据量读写;

MyISAM适用场景
1.不需要事务的操作;
2.插入、更新少,读取频繁;
3.频繁的统计计算。

相关文章

  • mysql

    常见的储存引擎 InnoDB MyISAM MyISAM和InnoDB的区别 ①InnoDB支持事务,MyISAM...

  • 常见面试题

    MyISAM和InnoDB的区别 MyISAM不支持事务,而InnoDB支持事务的。 MyISAM锁的粒度是表级,...

  • 数据库引擎

    MyISAM和InnoDB区别

  • 文章总结(6)—数据库

    InnoDB和MyISAM存储引擎的区别 InnoDB使用的是行锁,MyISAM使用的是表锁; InnoDB支持事...

  • 引擎 | ARCHIVE

    mysql常用引擎MyISAM和InnoDB MyISAM:插入快 查询快 InnoDB:修改快 支持事务 ARC...

  • MySQL 篇 --- 2021-08-31

    MyISAM 和 InnoDB 的区别 MyISAM 查询效率更高,但是不支持事物 InnoDB 插入、更新较高,...

  • 数据库常见问题

    MyISAM和InnoDB 主要区别: 1).[事务]MyISAM是非事务安全型的,而InnoDB是事务安全型的,...

  • Innodb和MyIsam的区别

    Innodb和MyIsam的区别 (1)对事务的⽀持不同MyIsam不⽀持事务,⽽InnoDB⽀持事务。(2)锁的...

  • 2018-03-19

    mysql MyISAM引擎和InnoDB的介绍 1、MyISAM MyISAM是MySQL的默认存储引擎,基于...

  • MyISAM 和 InnoDB ???

    经常有人问MySQL用MyISAM还是InnoDB面试时也总被提起 MyISAM 为早期的MySQL存储引擎 支持...

网友评论

      本文标题:MyISAM 和InnoDB

      本文链接:https://www.haomeiwen.com/subject/onnpsctx.html