我今天在面试 Java 开发人员时听到了这个消息。我必须列出 MyISAM 相对于 InnoDB 的一些优势,以及为什么它仍然被广泛使用。他们正在等待我的答案作为这个问题的标题。
正如我从他们自己的回答中了解到的那样:MyISAM 没有外键,数据库可以很容易地集群(例如,每台服务器一个表)。但是为什么我们不能简单地创建没有外键的 InnoDB 表呢?这个解释对我来说听起来很奇怪..
我今天在面试 Java 开发人员时听到了这个消息。我必须列出 MyISAM 相对于 InnoDB 的一些优势,以及为什么它仍然被广泛使用。他们正在等待我的答案作为这个问题的标题。
正如我从他们自己的回答中了解到的那样:MyISAM 没有外键,数据库可以很容易地集群(例如,每台服务器一个表)。但是为什么我们不能简单地创建没有外键的 InnoDB 表呢?这个解释对我来说听起来很奇怪..
这里没有灵丹妙药的答案。在决定将哪一种用于任何特定应用程序之前,您需要了解每种方法的优缺点。
InnoDB:
MyISAM:
例如,我会将 InnoDB 用于电子商务、用户数据库或任何我想在其中使用事务的东西。
对于数据仓库、日志记录、报告等,我可能会使用 MyISAM。
我不得不列出 MyISAM 相对于 InnoDB 的一些优势
全文搜索
...
不,就是这样。
(好吧,在某些情况下,MyISAM 比 InnoDB 更快,但很少有人值得忍受缺乏 ACID 合规性。今天,使用 MyISAM 做任何事情的主要原因是获得全文搜索,遗憾的是它不支持InnoDB。)
我不确定这是否不再正确 MyISAM 在读取方面比 InnoDB 快。
此外,MyISAM 表存储在单独的文件中,(据我所知)您实际上可以将这些文件传输到另一个 MySQL 数据库,并且更容易备份。
默认情况下,InnoDB 数据库存储在文件系统上的一个巨大的 glob 中。
至于为什么它仍然被广泛使用,我一直认为是因为它是默认选项。就我个人而言,我仍然认为 InnoDB 胜过 MyISAM 的优势,根据我的经验,MyISAM 在数据完整性方面也存在问题。
您当然可以在没有外键的情况下创建 InnoDB 表,但这会削弱它的主要优点之一:参照完整性。然而,由于 MyISAM 的构建不是为了参照完整性,所以表键可以以不同的方式存储,而且可能更有效。
在锁定和访问方面也存在一些差异。InnoDB 支持行级锁定,而 MyISAM 只支持表级锁定。根据您正在执行的查询(SELECTS 与 INSERTS/UPDATES),这可能会对性能产生显着影响。
您需要阅读Mysql 性能博客。