多种暂时表效率的对照分析

多种暂时表效率的对照分析

老帅(20141107)

平时在写存储过程的时候,常常会用到暂时表,而暂时表的使用方法究竟有几种,哪种效率更好呢?我们来做个对照分析。

实验数据:表a有400万条记录,仅仅查询一个字段Title


1.  直接查询

--开启时间分析

SET STATISTICS TIME ON 
GO

--查询

SELECT Title FROM a

--结果

SQL Server 运行时间:占用时间 = 22013 毫秒。


2.变量表

--开启时间分析

SET STATISTICS TIME ON 
GO

--插入

DECLARE @tmpA TABLE

(

Title VARCHAR(200)

)

INSERT INTO @tmpA

SELECT Title FROM a

--查询

SELECT * FROM @tmpA

--结果

SQL Server 运行时间:占用时间 = 22913 毫秒。

3.暂时表

--开启时间分析

SET STATISTICS TIME ON 
GO

--插入

CREATE TABLE #tmpA

(

Title VARCHAR(200)

)

INSERT INTO #tmpA

SELECT Title FROM a

--查询

SELECT * FROM #tmpA

--结果

SQL Server 运行时间:占用时间 = 22743 毫秒。

4.不创建暂时表。直接插入到暂时表

--开启时间分析

SET STATISTICS TIME ON 
GO

--插入

SELECT * INTO #tmpA

FROM

(SELECT Title FROM a) AS b

--查询

SELECT * FROM #tmpA

--结果

SQL Server 运行时间: 占用时间 = 22671 毫秒。


5.使用WITH AS暂时表

--开启时间分析

SET STATISTICS TIME ON;

--插入

WITH tmpA AS

(

SELECT Title FROM a

)

--查询

SELECT * FROM tmpA

--结果

SQL Server 运行时间:占用时间 = 22188 毫秒。


通过以上的分析。非常easy看出哪种方法效率更高了。

在存储过程中尽量使用暂时表来存储暂时数据,不要使用变量表。

时间: 2024-12-09 06:31:19

多种暂时表效率的对照分析的相关文章

ORACLE-015:ora-25153 暂时表空间为空,ora01652 无法通过128

写了一个复杂的select语句,突然oracle就报了:ora-25153 暂时表空间为空,这个错误,于是网上查了下.发现了例如以下解决方法:创建一个新的暂时表空间. 首先要有system权限.登录进去后, 第一步,创建一个表空间.例如以下,引號中的d是盘符,oracleoradatatestdbtemp01是文件名,100m是大小, temp01是暂时空间名称,可改动. create temporary tablespace temp01 tempfile 'd:oracleoradatate

oracle表空间查询维护命令大全之三(暂时表空间)史上最全

--UNDO表空间汇总 --查看全部的表空间名字 SELECT NAME FROM V$TABLESPACE; --创建新的UNDO表空间,并设置自己主动扩展參数; CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS02.DBF' SIZE 10M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED; --注意:在OPEN状态下某

Oracle中暂时表空间的清理

作者:iamlaosong Oracle暂时表空间主要用来做查询和存放一些缓冲区数据. 暂时表空间消耗的主要原因是须要对查询的中间结果进行排序.暂时表空间的主要作用: 索引create或rebuild Order by 或 group by Distinct 操作 Union 或 intersect 或 minus Sort-merge joins analyze 重新启动数据库能够释放暂时表空间.假设不能重新启动实例,而一直保持问题sql语句的运行,temp表空间会一直增长.即使重建了暂时表空

在oracle存储过程中创建暂时表

在oracle的存储过程中,不能直接使用DDL语句,比方create.alter.drop.truncate等. 那假设我们想在存储过程中建立一张暂时表就仅仅能使用动态sql语句了: create or replace procedure pro as str_sql varchar2(100); begin -- 创建暂时表 str_sql := 'create global temporary table temp_table ( col1 varchar2(10), col2 number

【oracle11g,18】存储结构:暂时表,手工条带化,表/索引迁移表空间,删除表,外部表

一. 暂时表 暂时表放在暂时表空间,不生成redo,仅仅有undo. 在暂时表中能够创建索引.视图及触发器,还能够使用"Export and Import(导出和导入)"或"Data Pump(数据泵)"导出和导入暂时表的定义.可是.即使使用了ROWS 选项,也不会导出数据. 有基于事务(默认)和基于session两种.其它的会话不能訪问到. 在暂时表中.DML锁永远不须要. 1.创建默认的(基于事务的)暂时表:(on commit delete rows:提交时清

oracle暂时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段

今天在查数据的时候报错  ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, b.blocks * 32 / 1024 / 1024, a.sid, a.serial#, a.username, a.osuser, a.status, c.sql_text, b.contents FROM v$session a, v$sort_usage b

被Oracle全局暂时表坑了

今天凌晨4点多钟,在客户现场的负责人打电话给我,说非常奇怪,下载功能时快时慢.此下载功能非常复杂,之前一直是我优化,在半梦半醒中打开电脑,通过远程看着现场同事在PL/SQL developer中操作.运行同一条SQL,时快时慢,快的时候大概0.6s,慢的时候超过1分钟. 这条SQL有调用一个函数,功能是动态生成接近200条查询语句,SQL中都是有绑定变量的.是现场的測试环境,刚刚部署,心想应该不是数据库负载所致. 1. 抓取数据库AWR报告,全然没有压力,数据库server配置都是杠杠的.此刻心

暂时表

暂时表让用户仅仅可以操作各自的数据中而互不干扰,不用操心会破坏或影响其它SESSION/TRANSACTION的数据. 暂时表分为SESSION.TRANSACTION两种. 1. SESSION级的暂时表数据在整个SESSION都存在,直到结束此次SESSION: 2. TRANSACTION级的暂时表数据在TRANACTION结束后消失.即COMMIT/ROLLBACK或结束SESSION都会清除TRANACTION暂时表数据. 两种暂时表的语法: create global tempora

数据库中暂时表,表变量和CTE使用优势极其差别

1 在写SQL时常常会用到暂时表,表变量和CTE,这三者在使用时各有优势: 1. 暂时表:分为局部暂时表和全局暂时表. 1.1局部暂时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接可见,链接断开则暂时表就自己主动被释放,也能够手动drop table #tmptable 在使用不同的链接同一时候创建同样的暂时表时,互不影响,系统在tempdb中会自己主动附加以特定的session为标识的名字来区分. 经常在SP中使用,把须要操作的数据或者共同的数据取出放在暂时表中,兴许能够进