临时表

MySQL如何创建临时表

时光怂恿深爱的人放手 提交于 2020-03-18 22:22:18
mysql 利用 temporary 关键字就可以创建出一个临时表。创建的这张表会在与服务器的会话终止时自动消失 语法:create temporary table tbl_name...; 规则:每个会话只能看到自己创建的临时表,不同的会话可以创建相同表名称的临时表。临时表的表名可以和永久表的名字相同。 好处:可以利用临时表保存一些临时数据,断开会话自动清除数据 坏处:1.与服务器意外断开会话,临时表将被删除。    2.临时表只对创建会话可见,所以和线程池连接技术不能同时共用    3.可能会跟永久表冲突,导致重连之后误操作永久表种的数据。为了避免删除相同表名的永久表,执行删除表结构的时候可以使用drop temporary table_name; 创建一个临时表 create temporary table student_copy(   id int primary key,   name varchar(20) )Engine=InnoDB default charset utf8 临时表创建完成,用show tables 看不见 MySQL什么时候创建临时表: https://mp.weixin.qq.com/s/r1-PuEGDdlLA6zE5pzjb2w 来源: https://www.cnblogs.com/hetaoyuan/p/12520708.html

存储过程编写经验和优化措施

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-14 09:40:59
一、适合读者对象 :数据库开发程序员,数据库的数据量很多,涉及到对SP(存储过程)的优化的项目开发人员,对数据库有浓厚兴趣的人。   二、介绍 :在数据库的开发过程中,经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作。如果项目的SP较多,书写又没有一定的规范,将会影响以后的系统维护困难和大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,就会遇到优化的问题,否则速度有可能很慢,经过亲身经验,一个经过优化过的SP要比一个性能差的SP的效率甚至高几百倍。   三、内容:   1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。 2、开发人员在提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。   3、高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点: a)SQL的使用规范 :  i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。  ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。  iii.

MySQL内存表-临时表

◇◆丶佛笑我妖孽 提交于 2020-03-13 20:22:12
HEAP表是访问数据速度最快的MySQL表,他使用保存在内存中的散列索引。但如果MySQL或者服务器重新启动,表中数据将会丢失. 用法:如论坛的在线人数统计,这种表的数据应该是无关紧要的,就几个简单的字段,数据也不多,记录数怎么也不会超过1000吧,但是操作是最频繁的(基本用户的每次动作都要更新这个表). 如何创建内存表? 创建内存表非常的简单,只需注明 ENGINE= MEMORY 即可: 1 CREATE TABLE `tablename` ( `columnName` varchar(256) NOT NUL) ENGINE=MEMORY DEFAULT CHARSET=latin1 MAX_ROWS=100000000; 注意: 当内存表中的数据大于max_heap_table_size设定的容量大小时,mysql会转换超出的数据存储到磁盘上,因此这是性能就大打折扣了,所 以我们还需要根据我们的实际情况调整max_heap_table_size,例如在.cnf文件中[mysqld]的下面加入: max_heap_table_size = 2048M 另外在建表语句中还可以通过MAX_ROWS来控制表的记录数。 内存表使用哈希散列索引把数据保存在内存中,因此具有极快的速度,适合缓存中小型数据库,但是使用上受到一些限制。 1、heap对所有用户的连接是可见的

join on 和 where的区别

时光怂恿深爱的人放手 提交于 2020-03-07 21:05:48
join中,on 和 where 的区别: 两个表在join时,首先做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步的临时表再进行过滤。 再使用left join 时,on 和 where条件的区别如下: on条件是在生成临时表时使用的条件,他不管on的条件是否为真,都会返回左边表所有的记录 where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义了,where后提交不为真的就全部过滤掉 如下: 原文: https://www.cnblogs.com/zzdbullet/p/10405540.html 来源: CSDN 作者: 似轲 链接: https://blog.csdn.net/mlh532354163/article/details/104719925

mysql 临时表和内存表

眉间皱痕 提交于 2020-03-07 09:02:53
查看内存表的最大值: show variables like '%heap%';  mysql> show variables like '%heap%'; +---------------------+----------+ | Variable_name | Value | +---------------------+----------+ | max_heap_table_size | 16777216 | +---------------------+----------+ 1 row in set (0.01 sec) 修改方法: 1)启动选项中修改启动mysql的时候加参数 -O max_heap_table_size=32M 2)修改MySQL的配置文件,在[mysqld]的段中增加 max_heap_table_size=32M , 3)MySQL客户端工具中执行命令 set global max_heap_table_size=32777216; 注意 内存表 对于变长数据的处理,例如:varchar(50)这样的字段,对于MyISAM的表结构而言,会按照字段中实际存储的内容计算空间, 而内存表则按照char(50)的方式计算空间,这样就会使内存表占据的空间大幅度上升 内存表不支持like操作,性能是非常的差。 内存表: 1. 参数控制:max_heap

oracle数据库数据导入导出步骤(入门)

早过忘川 提交于 2020-03-07 06:24:56
oracle数据库数据导入导出步骤(入门) 说明: 1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/imp命令导入导出,避免第三方工具版本差异引起的问题,同时效率更高,但特别注意:采用命令时要注意所使用的用户及其权限等细节。 3.在目标数据库导入时需要创建与导出时相同的用户名(尽量一致),并赋予不低于导出时用户的权限;同时还需创建与原数据库相同的表空间名,若本地数据库已存在相同的表空间,则只能进行表空间扩充。 一、导入前准备工作(在目标数据库操作) 知识补充: 表空间   Oracle数据库是通过表空间来存储物理表的,一个数据库实例可以有N个表空间,一个表空间下可以有N张表。   表空间(tablespace)是数据库的逻辑划分,每个数据库至少有一个表空间(称作SYSTEM表空间)。为了便于管理和提高运行效率,可以使用一些附加表空间来划分用户和应用程序。例如:USER表空间供一般用户使用,RBS表空间供回滚段使用。一个表空间只能属于一个数据库。 1. 登录服务器  用Xshell或者secureCRT工具都可 2. 查询磁盘空间是否足够大  执行df -h或者df -H命令进行查询,若可用空间不足则更换新的目标环境再继续其他操作。 [oracle@orac ~]$ df -h 1 3.

临时表、表变量的循环

岁酱吖の 提交于 2020-03-07 05:29:50
DECLARE @rowsDepartments INT --循环:事业部统计数 DECLARE @dSerialID INT --循环:循环计数 DECLARE @departmentsID INT DECLARE @tmpDepartments TABLE(SerialID INT IDENTITY(1,1),DepartmentsID INT,DepartmentsCode VARCHAR(50)) --事业部表 --循环:按事业部循环--开始 INSERT INTO @tmpDepartments SELECT [id] AS DepartmentsID, code AS DepartmentsCode FROM Departments ORDER BY code SET @rowsDepartments=@@rowcount SET @dSerialID=1 WHILE @dSerialID<=@rowsDepartments BEGIN ...... SELECT @departmentsID=DepartmentsID FROM @tmpDepartments WHERE SerialID=@dSerialID SET @dSerialID=@dSerialID+1 END --循环:按事业部循环--结束 来源: https://www.cnblogs.com

数据库分页技术的实现及高效率分页技术方案

有些话、适合烂在心里 提交于 2020-03-05 12:09:34
当浏览的数据量较大时,分页显示是个非常实用的方法。本文主要介绍了不同数据库中分页技术的实现以及能够提高效率的分页技术的三个方案,希望能够对您有所帮助。 数据库分页 技术能够帮助浏览者更好的查看信息,不同数据库实现分页时的方法也各有不同。本文我们主要介绍几种不同数据库分页显示的实现方法以及高效率分页技术的三个方案,接下来我们就开始介绍。 不同数据库分页技术的实现代码: 1. Oracle :select * from ( select row_.*, rownum rownum_ from ( query_SQL ) row_ where rownum =< max) where rownum_ >= min 2. SQL Server :select top @pagesize * from tablename where id not in (select top @pagesize*(@page-1) id from tablename order by id) order by id 3. MySQL :select * from tablename limit position, counter 4. DB2 :select * from (select *,rownumber() as ROW_NEXT from tablename) where ROW_NEXT

SQLSERVER存储过程基本语法

筅森魡賤 提交于 2020-03-04 08:29:08
转自: http://www.cnblogs.com/SunShineYPH/archive/2011/12/13/2285570.html 一、定义变量 view source print ? --简单赋值 declare @a int set @a=5 print @a --使用select语句赋值 declare @user1 nvarchar(50) select @user1= '张三' print @user1 declare @user2 nvarchar(50) select @user2 = Name from ST_User where ID=1 print @user2 --使用update语句赋值 declare @user3 nvarchar(50) update ST_User set @user3 = Name where ID=1 print @user3 二、表、临时表、表变量 view source print ? --创建临时表1 create table #DU_User1 ( [ID] [ int ] NOT NULL , [Oid] [ int ] NOT NULL , [Login] [nvarchar](50) NOT NULL , [Rtx] [nvarchar](4) NOT NULL , [ Name ] [nvarchar]

SQL调优

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-04 00:12:03
SQL调优对提高项目的性能有着至关重要的作用,介绍几种常见的SQL调优方式,仅供参考。 1. 对查询进行优化,要尽量避免全表扫描(带*号的查询),首先应考虑在 where 及 order by 涉及的列上建立索引。 2. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描, 如: select id from t where num is null 最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库。 备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num = 0 3. 应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。 4. 应尽量避免在 where 子句中使用 or 来连接条件, 如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描 , 如: select id from