MyISAM与Innodb和Innodb相关的表格

时间:2012-05-06 21:20:25

标签: php mysql innodb myisam

我正在创建的应用程序主要用于选择,但有些是插入,更新等。我想知道在这些情况下哪种性能最佳。

其次,当我在innodb中有两个相关的表时,如果它与另一个表中的一行相关而没有吐出错误,如何删除一行呢?

最后,如果我插入一个表,是否会自动填写相关表的外键或者我是否已对此进行编程?

此应用程序是用PHP编写的。

由于

3 个答案:

答案 0 :(得分:1)

纯粹在性能方面MyISAM历史上(有?)优于InnoDB。

但考虑到 MyISAM 完全支持参照完整性约束和事务并使用/使用表级锁定我绝对会选择 InnoDB 。您所面临的风险是数据完整性,您需要一个特殊的场景来保证MyISAM的需要。

关于考虑相关表格的问题:只需将cascade选项提供给your foreign key constraints

答案 1 :(得分:1)

  

我创建的应用程序主要用于选择,但有些是插入,更新等。我想知道在这些情况下哪种性能最佳。

更重要的问题:如果您的数据损坏了,这有关系吗?如果是,则需要交易,这意味着MyISAM已经出局。然后,您可以开始关注性能,因为只有这样,您才能实现第一个也是最重要的性能提升:应用从不工作到工作的地方。

  

其次,当我在innodb中有两个相关的表时,如果它与另一个表中的一行相关而没有吐出错误,如何删除一行呢?

首先删除相关行,或者通过使用ON DELETE CASCADE定义外键约束 - 然后自动删除相关行;一个危险的特征。

  

最后,如果我插入一个表,是否会自动填写相关表的外键或者我是否已对此进行编程?

不,是的。这不是魔术 - 应用程序如何知道其他列应包含的内容,或者您​​是否真的想要一个条目?

答案 2 :(得分:1)

  

主要用于选择,但有些是插入,更新

取决于。写入的读取量是多少? 80%? 90%? 95%?写入是与读取交错还是批量执行?数据库上有什么级别的并发访问?是否有特定的表格写得很重?

MyISAM的读取速度要快得多,但由于它将整个表锁定为写入,因此与Innodb相比总体吞吐量下降。

对于具有隔夜ETL的数据仓库,MyISAM再次具有净性能优势。对于非事务性CMS(想想简单的发布工具),MyISAM可能会更快。对于典型的基于Web的商店,您希望看到超过95%的读取,写入将主要与特定表隔离,并且一次更新几行 - 这里有点边缘,最好的解决方案可能是一种混合方法。对于具有频繁更新和大量并发访问(例如用于存储会话数据)的数据库的OTOH来说,这是一种方法。

  

当我在innodb中有两个相关的表时,如果它与另一个表中的一行相关而没有排出错误,如何删除一行呢?

使用innodb并声明foreign key constraints

  

如果我插入一个表,它会自动填写相关表的外键

mysql如何知道要在表中放入哪些数据?要添加多少行?你需要自己做。