我正在创建的应用程序主要使用选择,但也有一些是插入、更新等。我想知道在这些情况下哪一个是最好的性能。
其次,当我在innodb中有两个相关的表时,如何删除与另一个表中的行相关的行,而不会产生错误?
最后,如果我插入到一个表中,它会自动填充相关表的外键,还是让我在中进行编程?
这个应用程序是用PHP编写的。
谢谢
发布于 2012-05-07 05:27:10
历史上纯粹基于性能的MyISAM (had?)超越InnoDB的优势。
但考虑到MyISAM并不完全支持引用完整性约束和事务,并且使用/使用表级锁定,我肯定会选择InnoDB。你在这里冒的是数据完整性的风险,在我看来,你需要一个特殊的场景来保证对MyISAM的需求。
关于你的问题,考虑相关的表格:只需给your foreign key constraints想要的cascade选项。
发布于 2012-05-07 05:27:26
我正在创建的应用程序主要使用选择,但也有一些是插入、更新等。我想知道在这些情况下哪一个是最好的性能。
更重要的问题是:如果你的数据被破坏了,这很重要吗?如果是这样的话,您需要事务,这意味着MyISAM退出了。然后你可以开始关心性能,因为只有到那时,你才能实现第一个也是最重要的性能改进:应用程序从不工作到工作。
其次,当我在innodb中有两个相关的表时,如何删除与另一个表中的行相关的行,而不会产生错误?
要么先删除相关行,要么使用ON DELETE CASCADE定义foreign key约束-然后自动删除相关行;这是一个危险的特性。
,最后,如果我插入到一个表中,它是否会自动填充相关表的外键,或者我是否需要对此进行编程?
不是,而且是。这不是魔术-应用程序如何知道其他列应该包含什么,或者您是否真的想要一个条目?
发布于 2012-05-07 06:17:54
主要使用selects,但也有一些是插入、更新
视情况而定。写入的读取量是多少? 80%?90%?95%?写入是与读取交错还是成批执行?数据库上的并发访问级别是什么?是否有写入繁重的特定表?
MyISAM的读操作速度要快得多,但由于它会锁定整个表进行写操作,因此与Innodb相比,整体吞吐量会有所下降。
对于具有隔夜ETL的数据仓库,MyISAM同样具有净性能优势。对于非事务性的内容管理系统(想一想简单的发布工具),MyISAM可能更快。对于一个典型的基于web的商店,你会期望看到超过95%的读取,写入将主要隔离到特定的表,并且一次更新几行-在这里,它有点边缘,最好的解决方案可能是混合方法。对于具有频繁更新和大量并发访问(例如,用于存储会话数据)的数据库来说,innodb是可行的方法。
当我在innodb中有两个相关的表时,如果一行与另一个表中的一行相关,我如何删除它而不会产生错误?
使用innodb并声明foreign key constraints
如果我插入到一个表中,它会自动填充相关表的外键吗
mysql如何知道应该将哪些数据放入表中?要添加多少行?你需要自己来做。
https://stackoverflow.com/questions/10474405
复制相似问题