小熊开发 2013-08-19 22:08 采纳率: 100%
浏览 532
已采纳

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";

如果使用中间表,每次使用完还要删除数据吗?效率有没有临时表高

  • 写回答

2条回答 默认 最新

  • clxy大叔 2013-08-19 22:54
    关注

    [quote]同时有500个人在线,这个临时表要建议500个还是只建立一个? [/quote]
    如果你是使用[code="sql"]CREATE TEMPORARY TABLE...[/code]的话,是每个连接=connection会被自动建立1个临时表。
    如果你没有使用连接池,500个人启动500个连接的话,就会有500个临时表被建立。

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

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

    [quote]同一时间有多个人操作时,临时表里的数据会不会丢失。[/quote]
    不是每个人的单位,是每个连接的单位。
    即每次打开连接,你都只能重新建立个临时表,使用完扔在那里,断开连接后,系统自动删掉它。

    [quote]还是要建立一个普通表。来当成中间表使用。使用完后清空数据呢?[/quote]
    [size=large][b]我个人推荐这种方式。[/b][/size]

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器