如题所述
InnoDB 引擎:InnoDB 引擎提供了对数据库 acid 事务的支持,并且还提供了行级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。MySQL 运行的时候,InnoDB 会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存表的行数的,所以当进行 select count() from table 指令的时候,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较高的场景下使用会提升效率的。
MyIASM 引擎:MySQL 的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和 InnoDB 不同的是,MyIASM 引擎是保存了表的行数,于是当进行 select count() from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将 MyIASM 作为数据库引擎的首选。
MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。不过,5.5版本之后,MySQL引入了InnoDB(事务性数据库引擎),MySQL 5.5版本后默认的存储引擎为InnoDB。
大多数时候我们使用的都是 InnoDB 存储引擎,但是在某些情况下使用 MyISAM 也是合适的比如读密集的情况下。
MyIASM 引擎:MySQL 的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和 InnoDB 不同的是,MyIASM 引擎是保存了表的行数,于是当进行 select count() from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将 MyIASM 作为数据库引擎的首选。
MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。不过,5.5版本之后,MySQL引入了InnoDB(事务性数据库引擎),MySQL 5.5版本后默认的存储引擎为InnoDB。
大多数时候我们使用的都是 InnoDB 存储引擎,但是在某些情况下使用 MyISAM 也是合适的比如读密集的情况下。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2020-10-20
早期版本默认MyISAM后期默认InnoDB
最大特点就是InnoDB支持事务和MyISAM不支持事务。
最大特点就是InnoDB支持事务和MyISAM不支持事务。
第2个回答 2020-10-20
MyISAM可以看作是ISAM的升级版引擎,ISAM有的他都有,他也同样不支持事物处理,也不能够容错,还使用了一种表格锁定的机制,来优化多个并发的读写操作,MyISAM强调了快速读取操作。MyISAM的一个重要缺陷就是不能在表损坏后恢复数据。
InnoDB引擎提供了对数据库ACID的事物的支持,在使用MYSQL时,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事物处理也不支持外键,尽管要比ISAM和MyISAM慢很多,但是InnoDB包括了对事物处理和外来键的支持,这两点都是ISAM和MyISAM所没有的。
(ISAM他执行操作的效率很快,而且不占用大量的内存的存储资源,ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。)
InnoDB引擎提供了对数据库ACID的事物的支持,在使用MYSQL时,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事物处理也不支持外键,尽管要比ISAM和MyISAM慢很多,但是InnoDB包括了对事物处理和外来键的支持,这两点都是ISAM和MyISAM所没有的。
(ISAM他执行操作的效率很快,而且不占用大量的内存的存储资源,ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。)