3

我今天在面试 Java 开发人员时听到了这个消息。我必须列出 MyISAM 相对于 InnoDB 的一些优势,以及为什么它仍然被广泛使用。他们正在等待我的答案作为这个问题的标题。

正如我从他们自己的回答中了解到的那样:MyISAM 没有外键,数据库可以很容易地集群(例如,每台服务器一个表)。但是为什么我们不能简单地创建没有外键的 InnoDB 表呢?这个解释对我来说听起来很奇怪..

4

5 回答 5

8

这里没有灵丹妙药的答案。在决定将哪一种用于任何特定应用程序之前,您需要了解每种方法的优缺点。

InnoDB:

  • 支持FK
  • 支持交易
  • 使用大内存缓冲区进行操作
  • 支持行级锁定
  • 但是维护成本要高得多——您确实需要调整内存使用情况、配置表格文件等。

MyISAM:

  • 有一堆 InnoDB 没有的特殊列特性,比如:
    • 全文索引
    • 空间列(我很确定这不适用于 InnoDB)
  • 对于主要的读/追加用例来说非常快(表锁用于更新、删除,但不用于插入)
  • 通常也有更快的插入
  • 在内存中缓存索引(键缓冲区),但依赖操作系统来缓冲实际的数据页

例如,我会将 InnoDB 用于电子商务、用户数据库或任何我想在其中使用事务的东西。

对于数据仓库、日志记录、报告等,我可能会使用 MyISAM。

于 2009-10-29T23:35:43.150 回答
4

我不得不列出 MyISAM 相对于 InnoDB 的一些优势

  1. 全文搜索

  2. ...

  3. 不,就是这样。

(好吧,在某些情况下,MyISAM 比 InnoDB 更快,但很少有人值得忍受缺乏 ACID 合规性。今天,使用 MyISAM 做任何事情的主要原因是获得全文搜索,遗憾的是它不支持InnoDB。)

于 2009-10-29T23:10:53.947 回答
1

我不确定这是否不再正确 MyISAM 在读取方面比 InnoDB 快。

此外,MyISAM 表存储在单独的文件中,(据我所知)您实际上可以将这些文件传输到另一个 MySQL 数据库,并且更容易备份。

默认情况下,InnoDB 数据库存储在文件系统上的一个巨大的 glob 中。

至于为什么它仍然被广泛使用,我一直认为是因为它是默认选项。就我个人而言,我仍然认为 InnoDB 胜过 MyISAM 的优势,根据我的经验,MyISAM 在数据完整性方面也存在问题。

于 2009-10-29T23:02:23.697 回答
0

您当然可以在没有外键的情况下创建 InnoDB 表,但这会削弱它的主要优点之一:参照完整性。然而,由于 MyISAM 的构建不是为了参照完整性,所以表键可以以不同的方式存储,而且可能更有效。

在锁定和访问方面也存在一些差异。InnoDB 支持行级锁定,而 MyISAM 只支持表级锁定。根据您正在执行的查询(SELECTS 与 INSERTS/UPDATES),这可能会对性能产生显着影响。

于 2009-10-29T22:47:37.657 回答
0

您需要阅读Mysql 性能博客

于 2009-10-30T06:06:21.277 回答