MyISAM和InnoDB有什么区别?

Sco*_*ott 250 mysql database myisam innodb

我知道之前已经问过这个问题,但大部分时间都会询问与特定数据库或表格有关的问题.我无法在这个网站上找到描述两个引擎及其差异的答案,而不考虑某些特定数据库.

我希望将来能够在设计表或数据库时做出更明智的决策,所以我正在寻找关于两个存储引擎之间差异的全面答案.

MyISAMInnoDB有什么区别,在尝试在一个或另一个之间做什么时,我应该寻找什么?

spe*_*593 410

InnoDB和MyISAM之间的主要区别("关于设计您所询问的表或数据库")是对"参照完整性"和"事务"的支持.

如果您需要数据库来强制执行外键约束,或者您需要数据库来支持事务(即,作为单个工作单元处理的两个或多个DML操作所做的更改,应用所有更改,或者还原所有更改)然后你会选择InnoDB引擎,因为MyISAM引擎中没有这些功能.

这是两个最大的差异.另一个很大的区别是并发性.使用MyISAM,DML语句将获取表上的独占锁,并且在保持该锁的同时,没有其他会话可以对表执行SELECT或DML操作.

您询问的两个特定引擎(InnoDB和MyISAM)具有不同的设计目标.MySQL还有其他存储引擎,有自己的设计目标.

因此,在InnoDB和MyISAM之间进行选择时,第一步是确定您是否需要InnoDB提供的功能.如果没有,那么MyISAM就可以考虑了.

更详细地讨论差异是不切实际的(在这个论坛中),没有对问题空间进行更详细的讨论......应用程序将如何使用数据库,表格数量,表格大小,交易负载,选择量,插入,更新,并发要求,复制功能等.


数据库的逻辑设计应以数据分析和用户需求为中心; 选择使用关系数据库会在以后出现,甚至以后会选择MySQL作为关系数据库管理系统,然后为每个表选择一个存储引擎.

  • +1"参照完整性"和"交易"但我希望这个问题很快就会结束. (15认同)

med*_*ina 338

MYISAM:

  1. MYISAM支持表级锁定
  2. MyISAM专为速度需求而设计
  3. MyISAM不支持外键,因此我们用MYISAM调用MySQL是DBMS
  4. MyISAM使用单独的三个不同文件将其表,数据和索引存储在磁盘空间中.(tablename.FRM,tablename.MYD,tablename.MYI)
  5. MYISAM不支持交易.您无法使用MYISAM提交和回滚.一旦发出命令就完成了.
  6. MYISAM支持全文搜索
  7. 您可以使用MyISAM,如果表更加静态,有大量选择,更少更新和删除.

INNODB:

  1. InnoDB支持行级锁定
  2. InnoDB旨在处理大量数据时的最佳性能
  3. InnoDB支持外键,因此我们用InnoDB调用MySQL是RDBMS
  4. InnoDB将其表和索引存储在表空间中
  5. InnoDB支持交易.您可以使用InnoDB进行提交和回滚

  • [vd.6中引入了[InnoDB对全文索引的支持](http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html). (37认同)
  • 什么是"MyISAM专为速度需求而设计"与"InnoDB"的设计,在处理大量数据时能够获得最佳性能?什么是`diskspace` vs`表空间`?为什么"你可以使用MyISAM,如果表格更加静态,有很多选择,更少更新和删除"?您也可以使用InnoDB.你能为你的陈述提供论据吗? (27认同)
  • 注意:如果在创建表时设置了innodb_file_per_table选项,InnoDB可以将单个表存储在单独的文件中,类似于MyISAM. (9认同)
  • 如果你有很少的插入/更新/删除但是有大量的选择,那么InnoDB中的全文索引就不那么方便了. (5认同)
  • 版本5.5之后的@innoDB它将支持全文搜索 (2认同)