高性能mysql上有这样的说法, 我很困惑以及不敢相信, 我从上面的文字得到如下的结论?1, 如果一个事务锁定或修改一个表A上的行, 那么知道它被提交或回滚, 其他任何事物都不能使用引用到这个表A的查询缓存2, 在一个事务发生的时候, 系统会为它分配一个唯一的ID(这个ID是递增的), 但是如果它之后又有其他事务被开启, 那么innodb的数据字典中的表对应的事务id将会被更新为最新的, 这就导致了之前的事务因为id小于innodb数据字典中表对应的事务ID而导致不能访问查询缓存
这样理解是否正确, 尤其是第二条, 已经让我彻底陷入混乱, 因为只要使用innodb, auto_commit为1, 那么多个客户端上来的每一条sql都会被视为一个单独的事务, 这样已经对查询缓存构成了非常负面的影响
望各位热心的大哥指点下小弟, 先感谢各位了

解决方案 »

  1.   

    "id小于计数器值的事务会被禁止从缓存读取或写入数据"------------------------实际上第二条是否说明了, 即使所有事务都只查询而不修改或更新表, 仍然只有最后一个开启的事务可以使用查询缓存我觉得这样理解的话, 那么在innodb下, 开启查询缓存简直毫无用处
      

  2.   

    1, 如果一个事务锁定或修改一个表A上的行, 那么知道它被提交或回滚, 其他任何事物都不能使用引用到这个表A的查询缓存要看隔离级别的  如果隔离级别是read uncommited  则可以使用2, 在一个事务发生的时候, 系统会为它分配一个唯一的ID(这个ID是递增的), 但是如果它之后又有其他事务被开启, 那么innodb的数据字典中的表对应的事务id将会被更新为最新的, 这就导致了之前的事务因为id小于innodb数据字典中表对应的事务ID而导致不能访问查询缓存不理解