数据库中临时表、表变量和CTE使用优劣对比
来源:互联网 发布:新型网络搜索引擎 编辑:程序博客网 时间:2024/04/30 12:48
数据库中临时表,表变量和CTE使用优势极其区别 view sourceprint?
在写SQL时经常会用到临时表,表变量和CTE,这三者在使用时各有优势:
1. 临时表:分为局部临时表和全局临时表.
1.1局部临时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接可见,链接断开则临时表就自动被释放,也可以手动drop table #tmptable
在使用不同的链接同时创建相同的临时表时,互不影响,系统在tempdb中会自动附加以特定的session为标识的名字来区分. 常常在SP中使用,把需要操作的数据或者共同的数据取出放在临时表中,后续可以进行其他的操作(SELECT,UPDATE,DELETE,DROP等).
可以像创建永久表一样创建临时表:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->CREATE TABLE #tmpTable(ID INT,NAME VARCHAR(10),COMPANY VARCHAR(50))SELECT * FROM #tmpTable JOIN ...DROP TABLE #tmpTable
也可以使用INTO创建临时表,如查询EmployeeID=1的所有订单,放在临时表中,以备后续的处理.
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->SELECT E.EmployeeID,E.FirstName,E.LastName,O.OrderID,O.CustomerID,O.OrderDate INTO #tmpTableFROM Orders O JOIN Employees E ON O.EmployeeID=E.EmployeeIDWHERE E.EmployeeID=1
1.2全局临时表,创建时以##开头. 在tempdb中存储,对所有的session都可见.
CREATE TABLE ##tmpTable2(ID INT,NAME VARCHAR(20),COMPANY VARCHAR(50))SELECT * FROM ##tmpTable2 JOIN ...DROP TABLE ##tmpTable22.表变量:在内存中存储,比临时表执行速度快. 在SP或者function越过有效scope之后会自动释放,不用显式的写drop.表变量只可用在DML的操作中,会有比较多的限制.
代码
--直接声明表变量DECLARE @varTable TABLE(ID INT,NAME VARCHAR(20),COMPANY VARCHAR(50))--先创建表类型CREATE TYPE [dbo].[T_TEMP] AS TABLE(ID INT,NAME VARCHAR(20),COMPANY VARCHAR(50))--在声明表变量DECLARE @varTable T_TEMP
3.CTE(Common Table Expressions)通用表表达:是一个可以由定义语句引用的临时命名的结果集,在它们的简单形式中,可将 CTE 视为类似于非持续性类型视图的派生表.只须定义 CTE 一次,即可在查询中多次引用.
代码
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->WITH CTE_NAMEAS(SELECT E.EmployeeID,E.FirstName,E.LastName,O.OrderID,O.CustomerID,O.OrderDate FROM Orders O JOIN Employees E ON O.EmployeeID=E.EmployeeIDWHERE E.EmployeeID=1)SELECT * FROM CTE_NAME
CTE最强大之处在于递归查询,如要仔细研究可以参考微软的文章
- 数据库中临时表、表变量和CTE使用优劣对比
- 数据库中临时表、表变量和CTE使用优劣对比
- 数据库中临时表,表变量和CTE使用优势极其区别
- 临时表、表变量和CTE
- 临时表和表变量、内联UDF 派生表 CTE
- [SQLServer] 临时表、表变量、 CTE
- 临时表、表变量、CTE的比较
- 临时表、表变量、CTE的比较
- 临时表、表变量、CTE的比较
- 关于SQLServer2005的学习笔记——临时表、表变量和CTE
- TempDB 中表变量和局部临时表的对比
- TempDB 中表变量和局部临时表的对比
- 【sqlserver】 几种中间表实现方式比较(临时表、表变量、CTE)
- sqlserver 中临时表、临时变量和with as关键词创建“临时表”的区别
- 主流数据库中临时表的使用
- 临时表和表变量
- 临时表 和 表变量
- 临时表和表变量
- 4秒100万条数据导入SQL数据库
- [php笔记]session
- 第九周实验报告1
- cglib动态代理介绍
- jquery实现弹出层的动画效果,相对定位
- 数据库中临时表、表变量和CTE使用优劣对比
- 二叉树的遍历
- jsp到数据库乱码问题
- 25 个让 Java 程序员更高效的 Eclipse 插件
- .NET 正则表达式
- 防止jQuery ajax Load使用缓存的方法
- MTK调试的奇淫技巧
- SQL Server索引管理之六大铁律
- MFC中的CMenu---如何动态添加菜单/菜单项、子菜单、右键菜单