我正在布置我的表结构,并试图对如何设置存储引擎进行良好的教育猜测。
表的第一个字段是AUTO INCREMENT
的整数类型。字段2到5将是大约95%的读取,5%写入(写入仅为INSERT
。)然而,字段6将不断更新,大约50%读取(SELECT
语句)和50%写入(10%INSERT
90%UPDATE
。)
我刚刚读到如果表http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html中没有删除的条目,你可以自由地混合没有锁的MyISAM表的并发INSERT和SELECT语句。我不打算从表中删除任何行。
您是否建议我将表分成两个不同的表格。第一个表是MYISAM,其中包含字段1到5(95%读取,5%写入)。第二个表是innodb并且有两个字段,第一个是AUTO INCREMENT
,它与第一个表中的第一个字段相同,第二个字段是不断更新的字段(50%读取50%写)?
不同表中的两个insert语句应该一个接一个地出现。但是在极少数情况下,第一个INSERT语句通过,但第二个没有,我怎么能强制每个表的第一个字段正确映射到彼此?
答案 0 :(得分:2)
如果MyISAM表有多个VARCHAR字段,you may want to convert the table's row format to FIXED。这可以将MyISAM表及其索引文件扩大80%到100%,但在不改变其他任何内容的情况下,查询性能将提高20%-30%。
只要这些表以互斥的方式使用(没有JOIN),你应该没问题。为什么InnoDB和MyISAM之间没有JOIN? 每个执行JOIN的查询都不能混合使用InnoDB和MyISAM,否则每个SELECT查询都会因MyISAM和InnoDB表上的完整表锁而恶化。
以下是我发表的其他一些文章,完全阐明了InnoDB与MyISAM