有人可以在 Joomla 中解释为什么!3.0.1 MySQL的安装sql脚本使用ENGINE=InnoDB !?! 有什么特别的原因吗!????!?
2 回答
MySQL 数据库的两种主要类型的表存储引擎是 InnoDB 和 MyISAM。总结一下功能和性能的差异,
InnoDB 较新,而 MyISAM 较旧。
InnoDB 更复杂,而 MyISAM 更简单。
InnoDB 在数据完整性方面更加严格,而 MyISAM 是松散的。
InnoDB 实现了用于插入和更新的行级锁,而 MyISAM 实现了表级锁。
InnoDB 有事务,而 MyISAM 没有。
InnoDB 有外键和关系约束,而 MyISAM 没有。
InnoDB 有更好的崩溃恢复,而 MyISAM 在系统崩溃时恢复数据完整性方面很差。
MyISAM 有全文搜索索引,而 InnoDB 没有。
鉴于这些差异,InnoDB 和 MyISAM 各有其独特的优势和劣势。它们在某些情况下都比另一个更适合。
InnoDB 的优势
InnoDB 应该用于优先考虑数据完整性的地方,因为它在关系约束和事务的帮助下固有地处理它们。
在写入密集型(插入、更新)表中更快,因为它利用行级锁定并且只保留对正在插入或更新的同一行的更改。
InnoDB 的缺点
由于 InnoDB 必须处理表之间的不同关系,数据库管理员和方案创建者必须花费更多时间来设计比 MyISAM 更复杂的数据模型。
消耗更多的系统资源,例如 RAM。事实上,许多人建议在安装 MySQL 后如果没有实质性的需要,关闭 InnoDB 引擎。
没有全文索引。
MyISAM 的优势
设计和创建更简单,因此更适合初学者。不用担心表之间的外部关系。
由于结构更简单,因此总体上比 InnoDB 更快,因此服务器资源的成本要低得多。
全文索引。
特别适用于读取密集型(选择)表。
MyISAM 的缺点
没有数据完整性(例如关系约束)检查,这是数据库管理员和应用程序开发人员的责任和开销。
不支持在银行等关键数据应用程序中必不可少的交易。
对于经常插入或更新的表,比 InnoDB 慢,因为整个表都被锁定以进行任何插入或更新。
比较非常简单。
InnoDB 更适合需要频繁插入和更新的数据危急情况。
另一方面,MyISAM 在不太依赖于数据完整性并且大多只是选择和显示数据的应用程序中表现更好。
考虑到他们没有使用任何外键约束这一事实,这实际上是一个非常好的问题。
由于他们自己没有使用外部约束,因此我想到了为什么他们可能使用 InnoDB 而不是 MyISAM 的几个原因是:
他们有一些未来计划在某个时间点严格数据完整性。
他们希望允许为 Joomla 编写扩展程序的人引用现有数据并在创建者想要的情况下进行硬约束。IE:让我们想象一个在 Joomla 系统中为用户存储笔记的组件。然后作者可以像这样创建一个表:
CREATE TABLE IF NOT EXISTS `#__notes` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `note` VARCHAR(255) NOT NULL, `owner` INT(11) NOT NULL, PRIMARY KEY (`id`), INDEX (`owner`), CONSTRAINT FOREIGN KEY (`owner`) REFERENCES `#__users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
那么作者可以确定笔记的所有者确实存在,并且如果用户从系统中删除,他将不会有任何垃圾剩余,因为属于某个用户的所有笔记也会因设置而被删除如果您不想手动维护干净的数据库,则删除操作上的 CASCADE 非常方便,如果您想要引用的数据库将使用不同的引擎,即 MyISAM,则这是不可能的。