首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:使用MYISAM还是INNODB引擎?(情节扭曲封闭)

问MySQL:使用MYISAM还是INNODB引擎?(情节扭曲封闭)
EN

Database Administration用户
提问于 2013-01-11 02:49:02
回答 1查看 983关注 0票数 1

我们对所有的表都使用INNODB,但是我有一个特殊的表,一个100+ GB引用表(只对它进行读取查询)。

我们使用LOAD DATA INFILE在一个夜间批处理作业中加载对此表的更改。

对于引用表来说,MyISAM更紧凑、更有效。但这将是我们使用的唯一MyISAM表。

其余表上的工作负载是典型的web应用程序,只有1个表具有沉重的写负载和正常的读取负载。

  • 问题1-当我知道我需要为其他工作负载使用专用于MyISAM缓存的相当数量的内存时,是否值得将内存专门用于这个表的InnoDB缓存?
  • 问题2-当我运行LOAD DATA INFILE 'from_nightly_batch' REPLACE INTO TABLE mytable时,MyISAM会锁定表以进行读取吗?InnoDB会吗?在两个引擎中进行夜间更新时,我可以使用参考表吗?
EN

回答 1

Database Administration用户

回答已采纳

发布于 2013-01-11 03:26:31

下面是一些真正需要思考的事情

MyISAM只缓存索引,所以总是存在磁盘I/O,InnoDB缓存数据和索引。。如果您能够保证对这个表调用的每个查询都只能获取必要的列,那么所有列都只能从索引(称为覆盖索引)中获取。

下面是覆盖索引的一些很好的链接:

MyISAM可以进行共享读取。InnoDB也可以。

请记住,每次MyISAM插入、更新和删除都会执行完整的表锁(在某些情况下,这可能是磁盘I/O使InnoDB等待轮到的关键路径)。如果该表已准备就绪,则可能需要使用专用的MyISAM密钥缓存。

来自LOAD DATA INFILE的大量插入将锁定MyISAM表。InnoDB可以更好地容忍它,但是可以检查LOAD DATA INFILE的行为,看看它是否锁定了表,而不管存储引擎是什么。

权衡取决于您写入MyISAM表的频率。

请不要将MyISAM表加入到任何INNODB表!锁定很笨拙,MyISAM更改不能回滚。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/31735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档