开发者社区> 问答> 正文

MYSQL临时表/中间表疑问

同时有500个人在线,都在同一时间段要操作MYSQL的临时表。

这里有个疑问,这个临时表要建议500个还是只建立一个?如果建立1个,同时操作时其它人的数据会不会丢失。

这是我的临时表结构,保存在内存中。

CREATE TEMPORARY TABLE tmp_tradelist_$id ( tid bigint(20) unsigned NOT NULL DEFAULT '0', status varchar(40) NOT NULL, PRIMARY KEY (tid) ) ENGINE=MEMORY DEFAULT CHARSET=utf8";

如果使用中间表,每次使用完还要删除数据吗?效率有没有临时表高 用来批量更新的。因为要根据不同的条件更新不同的值。每个请求要更新上百条或更多。我想先把要更新的数据插入中间表。然后再从中间表同步更新到原表。

我查资料发现有内存的临时表,疑问是使用临时表,同一时间有多个人操作时,临时表里的数据会不会丢失。

还是要建立一个普通表。来当成中间表使用。使用完后清空数据呢?

展开
收起
长安归故里. 2020-01-08 15:58:20 1530 0
2 条回答
写回答
取消 提交回答
  • 个人对建模比较关注

    建议使用缓存类型的数据产品解决,缓存产品有定期清理机制

    2020-03-25 16:47:19
    赞同 展开评论 打赏
  • 引用 同时有500个人在线,这个临时表要建议500个还是只建立一个?

    如果你是使用 Sql代码 收藏代码 CREATE TEMPORARY TABLE...
    的话,是每个连接=connection会被自动建立1个临时表。 如果你没有使用连接池,500个人启动500个连接的话,就会有500个临时表被建立。

    每个临时表生活在自己的connection/session中,不同连接间看不到对方的临时表。

    临时表会在连接断开时自动被Drop掉。

    引用 同一时间有多个人操作时,临时表里的数据会不会丢失。

    不是每个人的单位,是每个连接的单位。 即每次打开连接,你都只能重新建立个临时表,使用完扔在那里,断开连接后,系统自动删掉它。

    引用 还是要建立一个普通表。来当成中间表使用。使用完后清空数据呢?

    我个人推荐这种方式。

    因为临时表比较是连接单位的,现在全都是connection pool,搞不好数据会串(依赖驱动)。另外每次create,drop(自动)还是有开销的。

    用中间表的话,一次建好,终身有效,哈。 1.调试方便。 2.需要自己定时清理。 3.最后单独个数据文件加分区,毕竟碎片会很严重。 4.设计上要区分每个用户。可以根据业务走,虽然麻烦些,但是灵活。 5.互相间看得见。也好也不好。看需求。

    2020-01-08 15:58:45
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像