日期:2014-05-16  浏览次数:20737 次

求助: mysql中innodb引擎对于查询缓存的影响



高性能mysql上有这样的说法, 我很困惑以及不敢相信, 我从上面的文字得到如下的结论?

1, 如果一个事务锁定或修改一个表A上的行, 那么知道它被提交或回滚, 其他任何事物都不能使用引用到这个表A的查询缓存

2, 在一个事务发生的时候, 系统会为它分配一个唯一的ID(这个ID是递增的), 但是如果它之后又有其他事务被开启, 那么innodb的数据字典中的表对应的事务id将会被更新为最新的, 这就导致了之前的事务因为id小于innodb数据字典中表对应的事务ID而导致不能访问查询缓存


这样理解是否正确, 尤其是第二条, 已经让我彻底陷入混乱, 因为只要使用innodb, auto_commit为1, 那么多个客户端上来的每一条sql都会被视为一个单独的事务, 这样已经对查询缓存构成了非常负面的影响


望各位热心的大哥指点下小弟, 先感谢各位了


------解决方案--------------------
1, 如果一个事务锁定或修改一个表A上的行, 那么知道它被提交或回滚, 其他任何事物都不能使用引用到这个表A的查询缓存

要看隔离级别的 如果隔离级别是read uncommited 则可以使用

2, 在一个事务发生的时候, 系统会为它分配一个唯一的ID(这个ID是递增的), 但是如果它之后又有其他事务被开启, 那么innodb的数据字典中的表对应的事务id将会被更新为最新的, 这就导致了之前的事务因为id小于innodb数据字典中表对应的事务ID而导致不能访问查询缓存

不理解