MySql:MyISAM与Inno DB! [关闭]

问题描述 投票:41回答:12

MySql中的MyISAM和Inno数据库类型有什么区别?

mysql database innodb myisam
12个回答
54
投票

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

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

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

我确信谷歌搜索或MySQL网站将更详细地提出许多其他差异。


0
投票

以下是InnoDB和MyIsam之间差异的描述:

Differences between InnoDB and MyIsam

差异很小:

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

0
投票

MyISAM在备份方面更方便,因为只需锁定所有表并直接在文件系统中复制文件就相当简单。 (mysqlhotcopy这是一个perl脚本甚至是mysql afaik的一部分)

InnoDB有点复杂,只是复制文件不会,因为它们无法在另一台开箱即用的机器上恢复。

但是,有商业软件提供InnoDB hotcopying。


0
投票

虽然事务支持是主要区别,但如果你有long-running SELECT queries mixed with UPDATE statements,表级锁定可能是个问题。


19
投票

InnoDB和MyISAM

功能和性能比较:

  1. InnoDB较新,而MyISAM较旧。
  2. InnoDB更复杂,而MyISAM更简单。
  3. InnoDB在数据完整性方面更加严格,而MyISAM则是松散的。
  4. 当MyISAM实现表级锁时,InnoDB实现了用于插入和更新的行级锁。
  5. InnoDB有交易,而MyISAM没有。
  6. InnoDB具有外键和关系约束,而MyISAM则没有。
  7. InnoDB具有更好的崩溃恢复能力,而MyISAM在恢复系统崩溃时的数据完整性方面表现不佳。
  8. MyISAM有全文搜索索引,而InnoDB没有。

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

InnoDB的优点

  1. InnoDB应该用于数据完整性优先的地方,因为它通过关系约束和事务的帮助固有地处理它们。
  2. 写入密集型(插入,更新)表更快,因为它使用行级锁定,只保留对正在插入或更新的同一行的更改。

InnoDB的缺点

  1. 由于InnoDB必须处理表之间的不同关系,因此数据库管理员和方案创建者必须花费更多时间来设计比MyISAM更复杂的数据模型。
  2. 消耗更多的系统资源,如RAM。事实上,许多人都建议,如果在安装MySQL之后没有实际需要,可以关闭InnoDB引擎。
  3. 没有全文索引。

MyISAM的优点

  1. 设计和创建更简单,因此对初学者更好。不用担心表之间的外来关系。
  2. 由于结构更简单,整体上比InnoDB更快,因此服务器资源的成本更低。
  3. 全文索引。
  4. 特别适合读取密集型(选择)表。

MyISAM的缺点

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

比较非常简单。 InnoDB更适合需要频繁插入和更新的数据关键情况。另一方面,MyISAM在不完全依赖于数据完整性的应用程序中表现更好,而且大多只是选择和显示数据。

参考:Comparison InnoDB and MyISAM

您也可以在这里查看更多详情:MyISAM Or InnoDB MySQL engine?

希望这可以帮助。


16
投票

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


4
投票

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

对于大多数用途,InnoDB比MyISAM慢,但由于更好的锁定机制,在某些条件下可以更快地执行;当插入/更新正在执行时,MyISAM锁定整个表以进行读取。 InnoDB可以进行行级锁定,从而允许多个并发写入和读取表。


3
投票

1
投票

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


1
投票

MyISAM和InnoDB也以不同的方式将他们的数据存储在磁盘上。 MyISAM为每个表使用数据文件和索引文件,存储在以数据库命名的目录中。 InnoDB似乎将所有内容整合在一个名为ibdata1的文件中。


1
投票

NFS支持

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

来自Configuring InnoDB (MySQL version 5.5)

警告

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


1
投票

InnoDB功能1.提供完整的交易功能,符合完整的ACID(原子性,一致性,隔离性和耐久性)。

  1. 它具有行级锁定。通过支持行级锁定,您可以将数据添加到InnoDB表,而无需引擎使用每个插入锁定表,这样可以加速数据库中信息的恢复和存储。
  2. InnoDB系统的关键是数据库,缓存和索引结构,其中索引和数据都缓存在内存中以及存储在磁盘上。这样可以实现非常快速的恢复,甚至可以在非常大的数据集上运行。
  3. InnoDB支持外键约束
  4. InnoDB支持自动崩溃恢复
  5. InnoDB支持表压缩(读/写)
  6. InnoDB支持空间数据类型(无空间索引)
  7. Innodb支持非锁定ANALYZE TABLE,仅在服务器运行了很长时间后才需要,因为它潜入索引统计信息并在表打开时获取索引信息。
  8. Innodb没有单独的索引文件,因此不必打开它们。
  9. Innodb以主键顺序(ALTER之后)一次建立一行索引,这意味着索引树不是按最佳顺序构建并且是碎片化的。目前无法对InnoDB索引进行碎片整理,因为InnoDB无法构建索引在MySQL 5.0中排序。即使丢弃并重新创建InnoDB索引,也可能导致索引碎片,具体取决于数据。
  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索引。 MYISAM特色 没有交易支持 表级锁定 提供全文搜索 表格中的数据没有限制。 快速COUNT(*)s(不使用WHERE,GROUP BY或JOIN时) 全文索引 更小的磁盘空间 非常高的表压缩(只读) 空间数据类型和索引(R树)
  14. 通过使用DATA DIRECTORY ='/ path / to / data / directory'或INDEX DIRECTORY ='/ path / to / index / directory',您可以指定MyISAM存储引擎应放置表的数据文件和索引文件的位置。该目录必须是目录的完整路径名,而不是相对路径。

你可以在http://faisalbhagat.blogspot.com/2014/09/innodb-vs-myisam.html找到更多细节

© www.soinside.com 2019 - 2024. All rights reserved.