代码之家  ›  专栏  ›  技术社区  ›  Arron S

mysql:myisam和inno-db![关闭]

  •  40
  • Arron S  · 技术社区  · 17 年前

    mysql中myisam和inno-db类型有什么区别?

    12 回复  |  直到 8 年前
        1
  •  53
  •   Anant    8 年前

    主要区别在于innodb支持事务,而myisam不支持。

    还有许多其他的区别,但是我知道的共同点是:

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

    我相信谷歌搜索或MySQL网站会带来更多的细节上的差异。

        2
  •  19
  •   talha2k    14 年前

    InnoDB和Myisam

    特点和性能比较:

    1. InnoDB较新,而MyISAM较旧。
    2. InnoDB更复杂,而MyISAM更简单。
    3. innodb在数据完整性方面更严格,而myisam则更宽松。
    4. innodb执行行级锁,用于插入和更新,myisam执行表级锁。
    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. _t不支持在银行等关键数据应用程序中必不可少的事务。
    3. 对于经常插入或更新的表,其速度比InnoDB慢,因为整个表被锁定用于任何插入或更新。

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

    参考文献: Comparison InnoDB and MyISAM

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

    希望这有帮助。

        3
  •  16
  •   bobince    17 年前

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

        4
  •  4
  •   Alexander Malfait    17 年前

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

    innodb在大多数情况下比myisam慢,但在某些情况下,由于具有更好的锁定机制,可以更快地执行;myisam在执行插入/更新时锁定整个表进行读取。InnoDB可以进行行级锁定,从而允许在表上进行多个并发写入和读取。

        5
  •  3
  •   sebthebert    17 年前
        6
  •  1
  •   Greg    17 年前

    主要区别在于InnoDB支持 transactions 而Myisam没有。

        7
  •  1
  •   Greg    17 年前

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

        8
  •  1
  •   Christopher Bottoms zerkms    15 年前

    NFS支持

    与myisam不同,innodb在nfs上可能有问题。

    Configuring InnoDB (MySQL version 5.5)

    注意安全

    如果考虑可靠性 您的数据,不要将innodb配置为 在NFS上使用数据文件或日志文件 卷。潜在问题各不相同 根据操作系统和NFS版本, 包括缺乏 防止写入冲突, 以及对最大文件大小的限制。

        9
  •  1
  •   faisalbhagat    11 年前

    INODB特征 1。提供完全符合ACID(原子性、一致性、隔离性和持久性)的完整事务处理能力。

    1. 它具有行级锁,通过支持行级锁,您可以在不使用引擎的情况下向innodb表中添加数据,每次插入都会锁定表,从而加速数据库中信息的恢复和存储。

    2. InnoDB系统的关键是数据库、缓存和索引结构,索引和数据都缓存在内存中,并存储在磁盘上,这使得恢复速度非常快,甚至可以在非常大的数据集上工作。

    3. InnoDB支持外键约束

    4. InnoDB支持自动故障恢复
    5. InnoDB支持表压缩(读/写)
    6. InnoDB支持空间数据类型(无空间索引)

    7. InnoDB支持非锁定分析表,只有在服务器运行很长时间后才需要,因为它会深入到索引统计中,并在表打开时获取索引信息。

    8. InnoDB没有单独的索引文件,因此不必打开它们。

    9. InnoDB按主键顺序(更改后)一次生成一行索引,这意味着索引树不是按最佳顺序构建的,而且是碎片化的,目前没有办法对InnoDB索引进行碎片整理,因为InnoDB无法在MySQL5.0中通过排序来构建索引。即使删除并重新创建InnoDB索引,也可能导致索引碎片化,这取决于数据。

    10. 表最多可包含1000列。

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

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

      MyISAM特征

      1. 无事务支持
      2. 表级锁定
      3. 提供全文搜索
      4. 表中的数据没有限制。
      5. 快速计数(*)s(不使用Where、Group By或Join时)
      6. 全文索引
      7. 更小的磁盘占用空间
      8. 非常高的表压缩(只读)
      9. 空间数据类型和索引(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

        10
  •  0
  •   Fred    17 年前

    以下是InnoDB和MyISAM之间的区别说明:

    Differences between InnoDB and MyIsam

    差异不大:

    • 迈萨姆 不支持任何数据库事务,
    • 诺伊德 将提供交易
    • 迈萨姆 提供表级锁定,
    • 诺伊德 提供行级锁定
    • 诺尼德 支持外键, 迈萨姆 不…
        11
  •  0
  •   jishi    17 年前

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

    InnoDB有点复杂,仅仅复制文件是不行的,因为它们不能在另一台机器上恢复。

    但是,有一些商业软件提供InnoDB热拷贝。

        12
  •  0
  •   user187380    16 年前

    虽然事务支持是主要的区别,但是如果您 long-running SELECT queries mixed with UPDATE statements .

    推荐文章