我正在创建的应用程序主要用于选择,但有些是插入,更新等。我想知道在这些情况下哪种性能最佳。
其次,当我在innodb中有两个相关的表时,如果它与另一个表中的一行相关而没有吐出错误,如何删除一行呢?
最后,如果我插入一个表,是否会自动填写相关表的外键或者我是否已对此进行编程?
此应用程序是用PHP编写的。
由于
答案 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如何知道要在表中放入哪些数据?要添加多少行?你需要自己做。