在mysql数据库中,虽然有更多的myisam表,但我们同时使用myisam和innodb表。
发布于 2013-02-23 23:17:05
执行一个连接查询有三个方面,可以是令人震惊的
每当有涉及MyISAM和InnoDB的联接时,InnoDB表在表级锁定方面的行为就会像MyISAM一样,而不是其正常的行级锁定。MVCC和酸顺应性不能应用于MyISAM数据。对于InnoDB表,它可能也会停滞不前。
如果通过插入、更新或删除更新任何MyISAM表,则连接查询中涉及的MyISAM表将从其他DB连接中锁定,从而迫使连接查询等待MyISAM表的读取。有鉴于此,如果连接查询中存在InnoDB和MyISAM的混合,则InnoDB表将受到主键项的间歇锁定(在聚集索引中)。
请记住,MVCC仍然允许READ-UNCOMMITTED和REPEATABLE-READ事务可以正常工作,并让某些数据视图可用于其他事务。对于读提交事务和SERIALIZABLE事务,情况并非如此。。
的视图
MySQL将依赖于表的索引基数来确定优化的解释计划。索引基数对于MyISAM表通常是稳定的,直到它被插入、更新和删除淹没为止。因此,您需要定期对OPTIMIZE TABLE表运行MyISAM。
InnoDB的指数基数从来没有稳定过!如果运行SHOW INDEXES FROM innodbtable;,则每次运行该命令时都会看到索引基数发生变化。这是因为InnoDB会深入研究指数来估计基数。即使您对一个OPTIMIZE TABLE表运行InnoDB,这也只会对该表进行碎片整理。OPTIMIZE TABLE将在内部运行ANALYZE TABLE,以便根据表生成索引统计信息。这适用于MyISAM。InnoDB通常会忽略它。您可以禁用诺姆b以获得稳定的解释计划,但这只会导致您像分析MyISAM表一样对InnoDB表进行表维护分析。
信不信由你,有仍然是InnoDB/MyISAM在更新选择期间加入的开放票证。如果你阅读它,它将决议总结如下:请不要加入混合InnoDB和MyISAM。
https://dba.stackexchange.com/questions/35322
复制相似问题