我们对所有的表都使用INNODB,但是我有一个特殊的表,一个100+ GB引用表(只对它进行读取查询)。
我们使用LOAD DATA INFILE在一个夜间批处理作业中加载对此表的更改。
对于引用表来说,MyISAM更紧凑、更有效。但这将是我们使用的唯一MyISAM表。
其余表上的工作负载是典型的web应用程序,只有1个表具有沉重的写负载和正常的读取负载。
LOAD DATA INFILE 'from_nightly_batch' REPLACE INTO TABLE mytable时,MyISAM会锁定表以进行读取吗?InnoDB会吗?在两个引擎中进行夜间更新时,我可以使用参考表吗?发布于 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更改不能回滚。
https://dba.stackexchange.com/questions/31735
复制相似问题