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";如果使用中间表,每次使用完还要删除数据吗?效率有没有临时表高 问题补充:用来批量更新的。因为要根据不同的条件更新不同的值。每个请求要更新上百条或更多。我想先把要更新的数据插入中间表。然后再从中间表同步更新到原表。我查资料发现有内存的临时表,疑问是使用临时表,同一时间有多个人操作时,临时表里的数据会不会丢失。还是要建立一个普通表。来当成中间表使用。使用完后清空数据呢?

解决方案

引用同时有500个人在线,这个临时表要建议500个还是只建立一个? 如果你是使用CREATE TEMPORARY TABLE...的话,是每个连接=connection会被自动建立1个临时表。如果你没有使用连接池,500个人启动500个连接的话,就会有500个临时表被建立。每个临时表生活在自己的connection/session中,不同连接间看不到对方的临时表。临时表会在连接断开时自动被Drop掉。引用同一时间有多个人操作时,临时表里的数据会不会丢失。不是每个人的单位,是每个连接的单位。即每次打开连接,你都只能重新建立个临时表,使用完扔在那里,断开连接后,系统自动删掉它。引用还是要建立一个普通表。来当成中间表使用。使用完后清空数据呢?我个人推荐这种方式。因为临时表比较是连接单位的,现在全都是connection pool,搞不好数据会串(依赖驱动)。另外每次create,drop(自动)还是有开销的。用中间表的话,一次建好,终身有效,哈。1.调试方便。2.需要自己定时清理。3.最后单独个数据文件加分区,毕竟碎片会很严重。4.设计上要区分每个用户。可以根据业务走,虽然麻烦些,但是灵活。5.互相间看得见。也好也不好。看需求。
解决方案二:
这个临时表是要干什么用?保存用户登录状态么?做登录唯一性校验?如果做唯一性校验有spring security,如果不是,用session保存不可以吗?这么多人频繁操作这张表,即便数据占用内存不大,数据库连接也是一个非常昂贵的资源,要尽量避免此类操作,如果做session同步,可以采用cookie或者memcache。

时间: 2024-09-14 14:02:50

MYSQL临时表/中间表疑问的相关文章

mysql 临时表、内存表和视图

虚拟表,顾名思义,就是实际上并不存在(物理上不存在),但是逻辑上存在的表.这样说很抽象,还是看一些实际的例子吧.在MySQL中,存在三种虚拟表:临时表.内存表和视图. 一.mysql临时表1.什么是临时表临时表是建立在系统临时文件夹中的表,如果使用得当,完全可以像普通表一样进行各种操作. 临时表的数据和表结构都储存在内存之中,退出时,其所占的空间会自动被释放.2.创建临时表(1)定义字段CREATE TEMPORARY TABLE tmp_table (        name VARCHAR(

mysql 临时表和内存表创建 查询 删除以及注意事项

mysql教程 临时表和内存表创建 查询 删除以及注意事项 临时表和内存表的engine 不同,临时表默认的是myisam,而内存表是memory ,临时表只对当前会话可见,连接断开时,自动删除! 你不必担心所创建的临时表的名称会和其他会话建立的临时表.或非临时表冲突!注意如果你的临时表和正常表名称相同,正常表会被隐藏--如同全局变量和局部变量那样 创建临时表不会引发通常的commit事务提交 临时表 create temporary table tmp_table 创建一个临时表 create

MySQL中管理表和索引的相关语句

1. 创建表 MySQL中创建表是通过create table语句实现的,语法这里就不介绍了,非常复杂,可以去官网上查询,所幸的是, 我们并不需要记住所有的选项,因为大部分都采用默认即可,下面介绍几个比较常用的选项. 1)指定存储引擎 默认的存储引擎由default-storage-engine指定,如果没有指定,则为MyISAM,如果建表时,你不想使用默认的存储 引擎,可以通过如下语句实现: create table table_name ( ... ) engine=engine_name;

MYSQL教程:MySQL服务器权限表

MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化.这些权限表分别user,db,table_priv,columns_priv和host.下面分别介绍一下这些表的结构和内容: user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的. db权限表:记录各个帐号在各个数据库上的操作权限. table_priv权限表:记录数据表级的操作权限. columns_priv权限表:记录数据列级的操作权限. ho

MySQL临时表的简单用法详解

当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询. 临时表与内存表 内存表分为2种,但共同点是,重起数据库以后,内存中的数据全部丢失,内存表的功能有部分的限制,有些属性不能像正常表一样使用,所以请大家使用的时候谨慎参照官方文档.下面只是抛砖引玉. 1.临时表:表建在内存里,数据在内存里 2.内存表:表建在磁盘里,数据在内存里 MySQL临时表需要简

MySQL分库分表的实现过程详解介绍

MySQL分库分表基础表介绍 表基本模型结构 这里我们模拟一个商城的基本的表结.此结构由(用户.门店.导购.门店商品.订单.订单对应的商品).其中,导购也是一个用户,门店是只属于一个店主的,同时店主本身也是一个导购也是一个普通用户. 结构图:   构造数据脚本 MySQL分库分表(1)-脚本 对业务场景进行模拟 场景1:购买者下订单. 1.从session中获得客户ID. 2.可以通过时间戳等拼凑一个订单ID(在创建表的时候为了方便我用自增的,在以下我们一直就吧订单ID看成不是自增的,是用程序生

MySQL临时表的优化方案

MySQL 是全球最受欢迎的开源数据库,作为开源软件组合 LAMP(Linux + Apache + MySQL + Perl/PHP/Python)中的重要一环,广泛应用于各类应用.Web2.0 时代,风靡全网的社区论坛软件系统 Discuz 和博客平台 Wordpress 均基于 MySQL 实现底层架构.Web3.0 时代,阿里巴巴.Facebook.Google 等大型互联网公司都采用更为灵活的 MySQL 构建了成熟的大规模数据库集群.阿里云数据库 MySQL 版基于 Alibaba

mysql锁定单个表的方法_Mysql

mysql锁定单个表的方法 复制代码 代码如下: mysql>lock table userstat read; mysql>unlock tables; 页级的典型代表引擎为BDB. 表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM. 行级的典型代表引擎为INNODB. -我们实际应用中用的最多的就是行锁. 行级锁的优点如下: 1).当很多连接分别进行不同的查询时减小LOCK状态. 2).如果出现异常,可以减少数据的丢失.因为一次可以只回滚一行或者几行少量的数据. 行级锁

mysql 临时表 cann't reopen解决方案_Mysql

当你创建临时表的时候,你可以使用temporary关键字.如: 复制代码 代码如下: create temporary table tmp_table(name varchar(10) not null,passwd char(6) not null); 或 复制代码 代码如下: create temporary table if not exists sp_output_tmp engine= memory select -from - where ID=current_id; 临时表只在当前