这个差异很可能是由于innoDB的配置,它比myISAM稍微调整一些。 innoDB的想法是将大部分数据保存在内存中,并且只有在有少量备用cpu周期时才清空/读入磁盘。
你应该甚至会打扰InnoDB是一个非常好的问题。如果您要继续使用MySQL,强烈建议您使用InnoDB获得一些经验。但是,如果你为一个数据库做一个快速又脏兮兮的工作,而这个数据库不会看到很多流量,也不会担心扩展,那么MyISAM的轻松可能只是一个胜利。 InnoDB在许多情况下只是想要一个简单的数据库就可以矫枉过正。
但是很多我的表不会被更新
你仍然可以得到InnoDB的性能提升,如果你正在做的99%的读数。如果您将缓冲池大小配置为将整个数据库保存在内存中,InnoDB将永远不必到磁盘即可获取数据,即使它未命中mysql查询缓存。 在MyISAM中,您很有可能必须从磁盘读取该行,并且您将离开操作系统为您执行缓存和优化。
InnoDB的缓冲池大小
我的第一个猜测是检查innodb_buffer_pool_size运出来设置为8M盒子。建议占用内存总量的80%左右。一旦你打的限制,因为它需要冲洗出来的东西缓冲区以腾出空间给新的数据,这可能是昂贵的
自动提交= 0
此外,还要确保自动提交是InnoDB的性能将显著下降当你加载你的桌子时关闭,或每次插入都会发生潮红。你可以在完成后重新打开它,这是一个客户端设置。非常安全。
载物台通常发生一次
想想,如果你真的想调整数据库,以适应“插入1,700行”。你多久做一次?在这种情况下MyISAM可能会更快,但是当你有100个并发连接同时读取和修改这个表时,你会发现一个经过良好调整的innoDB会赢,而MyISAM会阻塞表锁。
的MyISAM是如何看待这个操作
的MyISAM会在这个非常好,没有任何调整,因为在幕后,你只是追加每行一个文件(并更新索引)。您的操作系统和磁盘缓存将处理所有这些性能问题。
的InnoDB如何看待这种操作
Innodb的就知道了表需要写,所以它抛出的行插入插入缓冲。 在下一次插入之前,您没有时间给它,所以innoDB没有时间处理缓冲区,它在空间中运行并且在写入缓冲池并更新索引时被迫“保留”插入。 接下来,您的缓冲池填满,并且innoDB被迫'保留'插入并将某个页面从缓冲池中移出到磁盘。 你一直在疯狂地把插入物放在它上面。 请注意,如果您在完成此操作后快速调整InnoDB以提供MySQL>提示符,InnoDB仍然会在内部争先恐后地赶上它,但愿意为您执行新的事务。
必读:
http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
http://dev.mysql.com/doc/refman/5.0/en/innodb-tuning.html(见批量数据加载提示)
我只使用InnoDB时,我与关系表的工作。否则,如果你没有任何外键,我更喜欢MyISAM! – 2012-03-16 20:28:05
只是要指出,这两个表上都有一个索引。 “主”表目前是myisam。 – nick 2012-03-16 20:28:11
本,我想使用关系表,但我会处理可能数以百万计的行 - 我需要索引数十列,所以我不知道要去哪个方向。诚信不是什么大问题。至少不是这部分。 – nick 2012-03-16 20:29:49