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和性能比较:
- InnoDB较新,而MyISAM较旧。
- InnoDB更复杂,而MyISAM更简单。
- InnoDB在数据完整性方面更加严格,而MyISAM松散。
- InnoDB实现了行级锁的插入和更新,而MyISAM实现了表级锁。
- InnoDB有事务,而MyISAM没有事务。
- InnoDB有外键和关系限制,而MyISAM则没有。
- InnoDB具有更好的崩溃恢复能力,而MyISAM在恢复系统崩溃时的数据完整性方面效果很差。
- MyISAM有全文search索引,而InnoDB没有。
鉴于这些差异,InnoDB和MyISAM各有其独特的优缺点。 在一些情况下,它们都比另一个更适合。
InnoDB的优点
- 在数据完整性成为优先考虑的地方,应该使用InnoDB,因为在关系约束和事务处理的帮助下,它本身就会照顾它们。
- 在写入密集型(插入,更新)表中更快,因为它使用行级locking,只保留对正在插入或更新的同一行进行的更改。
InnoDB的缺点
- 因为InnoDB需要处理表之间的不同关系,数据库pipe理员和scheme创build者需要花费更多的时间来devise比MyISAM更复杂的数据模型。
- 消耗更多的系统资源,如RAM。 事实上,许多人推荐如果在安装MySQL之后没有实际的需求,InnoDB引擎就会被closures。
- 没有全文索引。
MyISAM的优点
- 更简单的devise和创build,从而更好地为初学者。 不用担心表格之间的对外关系。
- 整体上比InnoDB更快,因为结构更简单,服务器资源成本更低。
- 全文索引。
- 特别适合读取密集型(select)表格。
MyISAM的缺点
- 没有数据完整性(例如关系约束)检查,这又是数据库pipe理员和应用程序开发人员的责任和开销。
- 不支持在关键数据应用程序(如银行业务)中必不可less的交易。
- 对于频繁插入或更新的表,比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,从而允许多个并发写入和在表上读取。
您可以在MySQL文档中获得关于MyISAM&InnoDB的更多信息:
http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html
MyISAM和InnoDB也以不同的方式将数据存储在磁盘上。 MyISAM为每个表使用一个数据文件和一个索引文件,存储在一个以数据库命名的目录中。 InnoDB似乎把所有东西都放在一个名为ibdata1的文件中。
NFS支持
与MyISAM不同,InnoDB可能在NFS上有问题。
从configurationInnoDB(MySQL版本5.5)
警告
如果可靠性是数据的考虑因素,请不要将InnoDBconfiguration为使用NFS卷上的数据文件或日志文件。 根据操作系统和NFS版本的不同,潜在的问题可能会有所不同,包括缺less对冲突写入的保护以及对最大文件大小的限制等问题。
InnoDB特性1.提供完整的事务处理能力,具有完整的ACID(primefaces性,一致性,隔离性和耐久性)合规性。
-
它具有行级lockingfunction。通过支持行级别locking,您可以将数据添加到InnoDB表中,而引擎不会locking每个插入表,从而加快了数据库中信息的恢复和存储速度。
-
InnoDB系统的关键是数据库,caching和索引结构,其中索引和数据都caching在内存中,并存储在磁盘上。这使恢复非常快,即使在非常大的数据集上也能工作。
-
InnoDB支持外键约束
- InnoDB支持自动崩溃恢复
- InnoDB支持表压缩(读/写)
-
InnoDB支持空间数据types(无空间索引)
-
Innodb支持非lockingANALYZE TABLE,并且只有在服务器运行了很长时间后才需要,因为它潜入索引统计信息并在表打开时获取索引信息。
-
Innodb没有单独的索引文件,所以不需要打开。
-
Innodb以主键顺序(在ALTER之后)一次一行地构build索引,这意味着索引树不是按最优顺序构build的,而是分片的。目前没有办法对InnoDB索引进行碎片整理,因为InnoDB无法构build通过MySQL 5.0中的sorting索引。 即使删除并重新创buildInnoDB索引也可能导致索引碎片化,这取决于数据。
-
一个表格最多可以包含1000列。
-
InnoDB内部最大密钥长度是3500字节,但是MySQL本身将其限制为3072字节。 (对于MySQL 5.0.17之前的非64位版本,以及5.0.15之前的所有版本,1024字节)。
- InnoDB中默认的数据库页面大小是16KB。 通过重新编译代码,您可以将其设置为从8KB到64KB的值。 您必须更新univ.i源文件中的UNIV_PAGE_SIZE和UNIV_PAGE_SIZE_SHIFT的值。
-
InnoDB表不支持FULLTEXT索引。
MYISAMfunction
- 没有交易支持
- 表级locking
- 提供全文search
- 表中的数据没有限制。
- 快COUNT(*)s(当不使用WHERE,GROUP BY或JOIN时)
- 全文索引
- 更小的磁盘空间
- 非常高的表压缩(只读)
- 空间数据types和索引(R-tree)
- 通过使用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可能会成为问题。