繁体   English   中英

为什么在Joomla 3.0.1安装sql脚本中使用ENGINE = InnoDB?

[英]Why in Joomla 3.0.1 installation sql script ENGINE=InnoDB is used?

请有人在Joomla解释原因! 3.0.1安装用于MySQL的sql脚本是使用ENGINE = InnoDB !?! 有什么特别的原因!??!?

MySQL数据库的两种主要类型的表存储引擎是InnoDB和MyISAM。 总结一下功能和性能的差异,

  1. InnoDB较新,而MyISAM较旧。

  2. InnoDB更复杂,而MyISAM更简单。

  3. InnoDB在数据完整性方面更加严格,而MyISAM则是松散的。

  4. 当MyISAM实现表级锁时,InnoDB实现了用于插入和更新的行级锁。

  5. InnoDB有交易,而MyISAM没有。

  6. InnoDB有外键和关系约束,而MyISAM没有。

  7. InnoDB具有更好的崩溃恢复能力,而MyISAM在恢复系统崩溃时的数据完整性方面表现不佳。

  8. MyISAM有全文搜索索引,而InnoDB没有。

    鉴于这些差异,InnoDB和MyISAM各有其优点和缺点。 它们在某些情况下比在另一种情况下更适合。

InnoDB的优点

InnoDB应该用于数据完整性优先的地方,因为它通过关系约束和事务的帮助固有地处理它们。

写入密集型(插入,更新)表更快,因为它使用行级锁定,只保留对正在插入或更新的同一行的更改。

InnoDB的缺点

由于InnoDB必须处理表之间的不同关系,因此数据库管理员和方案创建者必须花费更多时间来设计比MyISAM更复杂的数据模型。

消耗更多的系统资源,如RAM。 事实上,许多人都建议,如果在安装MySQL之后没有实际需要,可以关闭InnoDB引擎。

没有全文索引。

MyISAM的优点

设计和创建更简单,因此对初学者更好。 不用担心表之间的外来关系。

由于结构更简单,整体上比InnoDB更快,因此服务器资源的成本更低。

全文索引。

特别适合读取密集型(选择)表。

MyISAM的缺点

没有数据完整性(例如关系约束)检查,这就是数据库管理员和应用程序开发人员的责任和开销。

不支持在关键数据应用程序(如银行业务)中必不可少的事务。

对于经常插入或更新的表,InnoDB比InnoDB慢,因为整个表都被锁定以进行任何插入或更新。

比较非常简单。

InnoDB更适合需要频繁插入和更新的数据关键情况。

另一方面,MyISAM在不完全依赖于数据完整性的应用程序中表现更好,而且大多只是选择和显示数据。

阅读更多

考虑到他们没有使用任何外键约束,这实际上是一个非常好的问题。

由于他们自己没有使用外部约束,因此我想到了为什么他们可能会使用InnoDB而不是MyISAM的几个原因:

  1. 他们有一些未来计划在某个时间点严格控制数据完整性。

  2. 他们希望允许为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,这是不可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM