什么是临时表及其分类
推荐看这篇文章: 什么是临时表 临时表的特性 生命周期由建立的query连接决定,当query结束时,临时表就会被删除,同时临时表只对其依赖的连接可见,对其他连接具有独立性。
为什么要用临时表?
(1)相比于普通的实体表,创建临时表的开销小很多; (2)而且对于内存中的临时表,查询速度非常快,能起到缓存的作用;
使用临时表带来的问题
在主从复制的时候是会使用到临时表的,从节点使用复制线程的时候会创建附属的临时表,如果这个时候从节点崩溃了,那么所有的基于这个临时表的sql操作都不能正常执行,这个时候会造成主从不一致。如果这个从节点还是作为主的备用节点的话,那么后果更严重。
同时如果主节点使用了临时表,那么当主节点突然崩溃之前,基于临时表的sql传给了从节点但是这个临时表还没来得及传主节点崩溃了的话,从节点的复制功能也是无法使用的。
改进方案 - 伪临时表
解决这种问题就最好使用持久化的表来代替临时表,只需要使用一个专门的数据库命名空间,在其中创建伪临时表,以模拟真正的临时表的特性。这很容易做到,只需要为他们拟一个唯一的名字,一般可以在表名的最后加一个connection_id的后缀即可,这个后缀的作用主要是方便连接释放时对其对应的伪临时表进行删除操作。
伪临时表的优缺点
优点: (1)既具有临时表的特性又能避免临时表带来的一些问题 (2)可以帮你更好的调试应用程序,因为临时表不是实体表,与query连接息息相关,其他连接想要查看该连接的临时表的数据很困难,但是伪临时表可以做到
缺点:创建和维护伪临时表会带来一定的开销,因为创建实体表需要创建对应的.frm文件。
以上内容均来自《高性能mysql p483》


|