一、什么是临时表

  临时表属于会话级的,会话结束的时候,临时表被释放,其创建、使用、删除都和普通表一样,临时表空间一般利用虚拟内存,不必进行磁盘I/O,因此效率较高。。临时表有两种:普通临时表 (#TbName)和全局临时表(##TbName)
  普通临时表  属于创建该临时表的会话,会话结束时被释放,其他的会话不能使用
  全局临时表  属于所有的会话,在所有会话结束时被释放
  适用场合:高并发的场合(操作频繁,查询又多)
    关于高并发的一些基本内容(后边会将用临时表改善高并发的方法):

    1、只要进行表连接,那么肯定会做表的笛卡尔积(如join on时先做表的笛卡尔积,再筛选出满足on条件的数据)
    2、数据库中的锁:
      本例中锁的粒度在表级别上,用到的是X锁(排他锁)和S锁(共享锁)
      insert update delete操作:表上添加X锁(其他的用户不能访问)
      select操作:表上添加S锁(其他用户来的时候可以select,但是不能增删改)

    3、简单死锁情况:
      用户1的操作需要tb1和tb2两个表的资源,已经获取了tb1并给tb1加了X锁
      用户2的操作需要tb1和tb2两个表的资源,已经获取了tb2并给tb2加了X锁
      用户1和用户2都在等对方释放资源
      其他用户来请求tb1和tb2时等待用户1和用户2释放资源
      程序无法继续进行了
         简单解决死锁:
      ①用户1和用户2获取资源的顺序都改成先获取资源1,再获取资源2
      ②获取资源时把资源1和资源2作为一个整体,一起获取

二、临时表的使用

2.1  临时表的基本使用

  在创建数据库连接后创建一个临时表,连接期间像使用普通表一样使用

--创建临时表
create table #MyUserInfo
(
  id int primary key identity(1,1),
  username nvarchar(20)
)
--使用临时表
select * from #MyUserInfo --释放资源
drop table #MyUserInfo --临时表的常用方式,把用户表的数据存入一个临时表(#MyUserInfo)中
select * into #MyUserInfo from Tb_UserInfo
select * from #MyUserInfo --全局临时表,用法和普通临时表一样,用##TbName标识(开发中尽量不要自己创建,其他人也可能创建一个相同的全局临时表造成冲突)
select into ##myUserInfoG from Tb_UserInfo
drop table ##myUserInfoG

2.2  临时表改善高并发

  用临时表对高并发进行优化时,优化的原则是尽早释放表中的锁,如我们在对Tb_UserInfo和Tb_RoleInfo中的数据进行连接查询时,会对这两种表都添加S锁,其他用户对这两张表进行增删改操作时,要等待查询完成。我们通过临时表实现优化,就是让用户在查询时通过临时表来查询,尽早释放原表的S锁。

--临时表改善高并发
select * into #userinfo from Tb_UserInfo
select * into #roleinfo from Tb_RoleInfo --执行下边查询时,原userinfo表和roleinfo表的s锁已经被释放了
select username,rolename from #userinfo as u
join #roleinfo as r on u.roleid=r.rid

SqlServer中的临时表的更多相关文章

  1. sqlserver 存储过程中使用临时表到底会不会导致重编译

    曾经在网络上看到过一种说法,SqlServer的存储过程中使用临时表,会导致重编译,以至于执行计划无法重用, 运行时候会导致重编译的这么一个说法,自己私底下去做测试的时候,根据profile的跟踪结果 ...

  2. Sqlserver数据库中的临时表详解

    临时表在Sqlserver数据库中,是非常重要的,下面就详细介绍SQL数据库中临时表的特点及其使用,仅供参考. 临时表与永久表相似,但临时表存储在tempdb中,当不再使用时会自动删除.临时表有两种类 ...

  3. SQLSERVER中的假脱机spool

    SQLSERVER中的假脱机spool 我发现网上对于假脱机的解释都非常零散,究竟假脱机是什么? 这几天在家里研究了一下,收集了很多网上的资料 假脱机是中文的翻译,而英文的名字叫做 spool 在徐老 ...

  4. (转)笔记320 SQLSERVER中的加密函数 2013-7-11

    1 --SQLSERVER中的加密函数 2013-7-11 2 ENCRYPTBYASYMKEY() --非对称密钥 3 ENCRYPTBYCERT() --证书加密 4 ENCRYPTBYKEY() ...

  5. Sqlserver中存储过程,触发器,自定义函数(一)

    Sqlserver中存储过程,触发器,自定义函数 1.存储过程有关内容存储过程的定义:存储过程的分类:存储过程的创建,修改,执行:存储过程中参数的传递,返回与接收:存储过程的返回值:存储过程使用游标. ...

  6. Sqlserver中存储过程,触发器,自定义函数

    Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...

  7. CTE在Oracle和Sqlserver中使用的差异

    CTE是一个很好用的工具,他可以帮助我们清晰代码结构,减少临时表使用,同时oracle和sqlserver都提供支持.但在oracle和sqlserver中使用CTE也存在一定区别. Oracle使用 ...

  8. SQL点滴18—SqlServer中的merge操作,相当地风骚

    原文:SQL点滴18-SqlServer中的merge操作,相当地风骚 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在tec ...

  9. SQLServer 中多行数据合并成一行数据(一个字段)

    需求:有四行数据,如下: 1.苹果 2.橘子 3.桃子 4.波罗 合并成一个字段:苹果,橘子,桃子,波罗: 需求明确之后,先弄点测试数据,上代码: --创建一个临时表 Create table #te ...

随机推荐

  1. [BUAA_SE_2017]第零次博客

    结缘计算机 你为什么选择计算机专业?你认为条件如何? 计算机是你喜欢的领域吗?是你擅长的领域吗? 说来也巧,高考选择专业时并不知道自己会这般喜欢计算机这个专业,却将其填在了北航的第一志愿. 第一次接触 ...

  2. Docker 网络部分的简单学习以及转帖别人的blog

    1. 感谢一下 大神: http://www.cnblogs.com/sparkdev/ 最近有时间的话 就会读一下他的博客.学习了解docker相关的知识 今天简单做了下 测试 在这里面记录一下. ...

  3. 关于Http_build_query的用法

    使用背景:在做接口业务过程中,有时会遇到这种情况,本地APP需要接口给其返回一个url,那么在拼接参数的时候,用这个函数就会很方便. 百度百科上给的解释是这样的:http_build_query -- ...

  4. ios微信浏览器中video视频播放问题

    微信ios只支持几种特定的视频格式,一般使用mp4格式的视频(腾讯官方就是用的这种视频格式)

  5. 使用ssh config配置文件来管理ssh连接

    我本人其实及其烦使用配置文件这种东西,有时候看到巨大又复杂的配置文件,甚至复杂过代码的时候,总感觉设计配置文件的人有些本末倒置. 但是ssh这个配置文件真的非常简单好用,让我稍微体验了一次配置文件使用 ...

  6. TortoiseGit连接gitlab,一直要求输入密码

    问题背景: 公司使用gitlab作为代码管理平台,安装了TortoiseGit之后,使用正常.但是重启电脑之后,再次使用TortoiseGit操作时总是提醒输入gitlab的账号.如下图: 问题原因: ...

  7. 机器学习--Logistic回归

    logistic回归 很多时候我们需要基于一些样本数据去预测某个事件是否发生,如预测某事件成功与失败,某人当选总统是否成功等. 这个时候我们希望得到的结果是 bool型的,即 true or fals ...

  8. Django model 字段详解

    字段类型选择: AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 ...

  9. day28 property 装饰器

    方法属性装饰器 本质上来说就是将方法的执行括号去掉,这样将一个方法掩饰成了一个变量名字,变成了类似属性的东西内置装饰器函数,只在面向对象中使用 from math import pi class Cr ...

  10. 【转】JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解

    http://www.cnblogs.com/therunningfish/p/5524238.html JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsol ...