MySql:MyISAM与Inno DB

MyISAM和Inno DBtypes在MySql中有什么区别?

主要区别在于InnoDB支持事务,而MyISAM则不支持事务。

还有很多其他的差异,但是我知道的常见的是:

  • MyISAM通常被认为search速度更快,但最近的InnoDB改进正在消除这种差异,并提高了高并发工作负载的性能
  • InnoDB支持交易,而MyISAM则不支持交易
  • InnoDB处理索引有点不同,将主键存储为每个索引的一部分(使索引在磁盘上占用更多空间,但也使得覆盖索引更有可能)
  • MyISAM执行表级locking,而InnoDB可以执行行级locking
  • MySQLconfiguration文件中使用了不同的内存/缓冲区/索引设置
  • InnoDB通常被认为具有更好的崩溃恢复能力
  • 正如在另一个答案中提到的,数据以不同的方式存储在磁盘上。 我相信InnoDB在这方面是可configuration的,如果需要的话,每个表可以有一个文件

我敢肯定,谷歌search或MySQL网站将带来更多的细节更多的其他差异。

InnoDB和MyISAM

function和性能比较:

  1. InnoDB较新,而MyISAM较旧。
  2. InnoDB更复杂,而MyISAM更简单。
  3. InnoDB在数据完整性方面更加严格,而MyISAM松散。
  4. InnoDB实现了行级锁的插入和更新,而MyISAM实现了表级锁。
  5. InnoDB有事务,而MyISAM没有事务。
  6. InnoDB有外键和关系限制,而MyISAM则没有。
  7. InnoDB具有更好的崩溃恢复能力,而MyISAM在恢复系统崩溃时的数据完整性方面效果很差。
  8. MyISAM有全文search索引,而InnoDB没有。

鉴于这些差异,InnoDB和MyISAM各有其独特的优缺点。 在一些情况下,它们都比另一个更适合。

InnoDB的优点

  1. 在数据完整性成为优先考虑的地方,应该使用InnoDB,因为在关系约束和事务处理的帮助下,它本身就会照顾它们。
  2. 在写入密集型(插入,更新)表中更快,因为它使用行级locking,只保留对正在插入或更新的同一行进行的更改。

InnoDB的缺点

  1. 因为InnoDB需要处理表之间的不同关系,数据库pipe理员和scheme创build者需要花费更多的时间来devise比MyISAM更复杂的数据模型。
  2. 消耗更多的系统资源,如RAM。 事实上,许多人推荐如果在安装MySQL之后没有实际的需求,InnoDB引擎就会被closures。
  3. 没有全文索引。

MyISAM的优点

  1. 更简单的devise和创build,从而更好地为初学者。 不用担心表格之间的对外关系。
  2. 整体上比InnoDB更快,因为结构更简单,服务器资源成本更低。
  3. 全文索引。
  4. 特别适合读取密集型(select)表格。

MyISAM的缺点

  1. 没有数据完整性(例如关系约束)检查,这又是数据库pipe理员和应用程序开发人员的责任和开销。
  2. 不支持在关键数据应用程序(如银行业务)中必不可less的交易。
  3. 对于频繁插入或更新的表,比InnoDB慢,因为整个表被locking以进行任何插入或更新。

比较非常简单。 InnoDB更适合需要频繁插入和更新的数据紧急情况。 另一方面,MyISAM在不太依赖数据完整性的应用程序中执行得更好,主要是select和显示数据。

参考: 比较InnoDB和MyISAM

您还可以在这里查看进一步的细节: MyISAM或InnoDB MySQL引擎?

希望这可以帮助。

MyISAM支持(非标准SQL)全文索引,InnoDB仍然没有。 这是我们今天使用MyISAM的唯一原因。

MyISAM和InnoDB最重要的区别在于InnoDB支持事务和外键。 如果您需要外键和相关function(例如自动级联删除),则需要使用InnoDB。

InnoDB对于大多数应用来说比MyISAM慢,但由于更好的locking机制,在某些条件下可以执行得更快。 当插入/更新执行时,MyISAMlocking整个表格进行读取。 InnoDB可以执行行级locking,从而允许多个并发写入和在表上读取。

MyISAM和InnoDB也以不同的方式将数据存储在磁盘上。 MyISAM为每个表使用一个数据文件和一个索引文件,存储在一个以数据库命名的目录中。 InnoDB似乎把所有东西都放在一个名为ibdata1的文件中。

NFS支持

与MyISAM不同,InnoDB可能在NFS上有问题。

从configurationInnoDB(MySQL版本5.5)

警告

如果可靠性是数据的考虑因素,请不要将InnoDBconfiguration为使用NFS卷上的数据文件或日志文件。 根据操作系统和NFS版本的不同,潜在的问题可能会有所不同,包括缺less对冲突写入的保护以及对最大文件大小的限制等问题。

InnoDB特性1.提供完整的事务处理能力,具有完整的ACID(primefaces性,一致性,隔离性和耐久性)合规性。

  1. 它具有行级lockingfunction。通过支持行级别locking,您可以将数据添加到InnoDB表中,而引擎不会locking每个插入表,从而加快了数据库中信息的恢复和存储速度。

  2. InnoDB系统的关键是数据库,caching和索引结构,其中索引和数据都caching在内存中,并存储在磁盘上。这使恢复非常快,即使在非常大的数据集上也能工作。

  3. InnoDB支持外键约束

  4. InnoDB支持自动崩溃恢复
  5. InnoDB支持表压缩(读/写)
  6. InnoDB支持空间数据types(无空间索引)

  7. Innodb支持非lockingANALYZE TABLE,并且只有在服务器运行了很长时间后才需要,因为它潜入索引统计信息并在表打开时获取索引信息。

  8. Innodb没有单独的索引文件,所以不需要打开。

  9. Innodb以主键顺序(在ALTER之后)一次一行地构build索引,这意味着索引树不是按最优顺序构build的,而是分片的。目前没有办法对InnoDB索引进行碎片整理,因为InnoDB无法构build通过MySQL 5.0中的sorting索引。 即使删除并重新创buildInnoDB索引也可能导致索引碎片化,这取决于数据。

  10. 一个表格最多可以包含1000列。

  11. InnoDB内部最大密钥长度是3500字节,但是MySQL本身将其限制为3072字节。 (对于MySQL 5.0.17之前的非64位版本,以及5.0.15之前的所有版本,1024字节)。

  12. InnoDB中默认的数据库页面大小是16KB。 通过重新编译代码,您可以将其设置为从8KB到64KB的值。 您必须更新univ.i源文件中的UNIV_PAGE_SIZE和UNIV_PAGE_SIZE_SHIFT的值。
  13. InnoDB表不支持FULLTEXT索引。

    MYISAMfunction

    1. 没有交易支持
    2. 表级locking
    3. 提供全文search
    4. 表中的数据没有限制。
    5. 快COUNT(*)s(当不使用WHERE,GROUP BY或JOIN时)
    6. 全文索引
    7. 更小的磁盘空间
    8. 非常高的表压缩(只读)
    9. 空间数据types和索引(R-tree)
  14. 通过使用DATA DIRECTORY ='/ path / to / data / directory'或INDEX DIRECTORY ='/ path / to / index / directory',您可以指定MyISAM存储引擎应该放置表的数据文件和索引文件的位置。 目录必须是目录的完整path名称,而不是相对path。

你可以在http://faisalbhagat.blogspot.com/2014/09/innodb-vs-myisam.htmlfind更多的细节。;

主要区别在于InnoDB支持事务 ,而MyISAM则不支持事务 。

以下是InnoDB和MyIsam之间的区别:

InnoDB和MyIsam的区别

几乎没有区别:

  • MYISAM不支持任何数据库事务,
  • INNODB将提供交易
  • MYISAM提供表级locking,
  • INNODB提供行级locking
  • INNOBD支持外键, MYISAM不…

就备份而言,MyISAM更加方便,因为locking所有表格并直接在文件系统中复制文件相当简单。 (mysqlhotcopy是perl脚本甚至是mysql afaik的一部分)

InnoDB稍微复杂一些,只是复制这些文件是不行的,因为它们不能在另外一台机器上恢复。

不过,有商业软件提供InnoDB热拷贝。

虽然事务支持是主要区别,但是如果您有长时间运行的SELECT查询与UPDATE语句混合 ,则表级locking可能会成为问题。