`
wandejun1012
  • 浏览: 2750071 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

sql server 表别名性能低 临时表性能高

 
阅读更多

看以下例子:

 

   select * from 
( select * from b left join c on xx=xx left join d on xx=xx left join e on xx=xx)
as a  where a.xx=xx
 

由于a是一个很复杂的东西,关键a是别名出来的。

那这种写法将会非常耗时。

 

但是如果将select * from b left join c on xx=xx left join d on xx=xx left join e on xx=xx放进一个临时表,再从临时表中加入where a.xx=xx,性能将提高的非常明显。

写法如下:

select * from b left join c on xx=xx left join d on xx=xx left join e on xx=xx into #tmpTable
 

因为临时表用过后要删除,所以考虑可以将整个过程放在一个存储过程里,如下:

 

写了一个存储过程对视图进行分页查询,但数据增多后发现基效率低得要命,三万多条数据要查询一个半小时都没出来,这不是要了命,于是想到了索引,应用过后仍无济于事。最后对sql进行分析和实践中得出,使用临时表可以大大加快视图的查询速度,见如下sql语句 
性能超低的视图分页sql语句:
select top 100 * from 
view_customerPayDetails where 
( 1=1) and (payId not in
(select top 100 payId from 
view_customerPayDetails where 
( 1=1) order by payId desc))order by payId desc
使用临时表提升性能的sql语句:
select top 100 payId into #tmpTable 
from view_customerPayDetails
order by payId desc
select top 100 * from view_customerPayDetails 
where  payId not in (select payId from #tmpTable ) 
order by payId desc
drop table #tmpTable ......
 

 

 

REF URL:http://www.ej38.com/showinfo/sqlserver-141034.html

 

 

 

 

 

 

分享到:
评论

相关推荐

    oracle与SQL server的语法差异总结

    - Oracle允许将查询结果集作为一个临时表使用,如 `SELECT * FROM (SELECT * FROM tab1)`,并且有虚表DUAL,常用于计算与实体表无关的表达式。 - SQL Server也支持类似的操作,但通常需要明确为子查询分配别名。 ...

    SQLServer与Oracle语法差异汇总.docx

    至于`SELECT`语句,Oracle允许将结果集作为临时表使用,无需别名,并且有`DUAL`虚表用于计算不依赖于实际表的表达式。在SQL Server中,虽然不常用,但也可以实现类似功能,只是没有内置的`DUAL`表。 总的来说,...

    SQL_Server学习笔记

    在FROM子句中使用子查询时,查询结果会被当作一个临时表来处理,并需要为子查询指定别名。 6. 分页查询 分页查询通常用于处理大量数据,使其按指定数量分批次展示,如使用LIMIT或FETCH子句实现分页效果。 7. 插入...

    VFP_控制_SQL_SERVER数据库的自定义函数集目录

    **功能**: 使用客户端的临时表更新服务器端的数据,并测试更新是否成功。 **参数说明**: - `LN_SQLCONNECT_HANDLE`: 数据库连接句柄。 - `LN_UPDATE_MODE`: 更新模式。 - `LN_ALIA_CLIENT`: 客户端临时表名。 - `...

    Sql Server中一个表2个字段关联同一个表(代码解决)

    代码如下:select a.man_id,man_name,d.sex_name,zw_name,c.money from man as a left join zw as b on a.zw_id=b.zw_id left join zw as c on a.man_id=c.man_id — 同时关联zw字段,通过表别名区别开 left ...

    sqlserver2005面试题

    - 在提供的SQL语句中,使用了#tmp作为临时表来存储数据,这是SQL Server中创建临时表的方式。临时表在会话范围内有效,用于处理临时的数据,通常在处理复杂查询时很有用。 5. **子查询与联接**: - 子查询是在...

    sql server2008应用与开发

    ### SQL Server 2008 应用与开发 #### 1.1 SQL Server 2008 概述 **1.1.1 SQL Server 2008 的体系结构** - **Microsoft SQL Server 2008** 由四个主要部分组成,即四大服务: - **数据库引擎**:负责数据的存储...

    oracle与sqlServer区别[归类].pdf

    创建 Oracle 数据库的过程涉及到表空间的建立,而表空间又分为数据表空间(对应数据文件)和临时表空间(对应事务日志文件)。 其次,Oracle Manager Server 与 SQL Server 的 Enterprise Manager 都是数据库管理...

    SQLServer数据库的简单语法

    - **Tempdb**:临时数据库,用于存放临时表和中间结果集。 - **Model**:新创建的数据库默认设置和初始数据的模板。 - **Msdb**:用于存储与 SQL Server Agent 相关的信息,如作业、警报等。 - **示例数据库**:...

    SqlServer 2005 T-SQL Query 学习笔记(1)

    CTE是SQL Server 2005引入的新特性,它允许定义一个临时的结果集,可以在后续的查询中重复使用。CTE的语法格式如下: ```sql WITH cte_name AS (cte_query) outer_query_refferring_to_cte_name; ``` CTE可以提供...

    关于SqlServer2000数据库中tempdb.mdf的迁移

    Tempdb是一个系统数据库,它为所有用户数据库提供临时表、临时存储过程以及其他临时对象的空间。每当一个会话开始时,tempdb都会被初始化并清除前一次会话的所有数据,因此它不保存任何持久化数据,但对性能有着直接...

    SqlServer AS的用法

    参考文献包括但不限于`Microsoft SQLServer 2008技术内幕:T-SQL 语言基础`和`Microsoft SQLServer 2008技术内幕:T-SQL 查询`,这些资料提供了更多关于SQL Server的深入知识。这部分内容由Alan_beijing补充提供,旨在...

    一条sql语句关联八个表

    使用子查询或者临时表可以简化逻辑。 3. **代码可读性**:为了保持代码的清晰和可读,可以使用别名,如`AS`关键字,来缩短表名。 4. **冗余数据**:过多的关联可能导致结果集中包含重复或冗余的数据,需要使用...

    SqlServer2005 数据库同步配置图文详解.doc

    - 选择订阅服务器类型(SqlServer2005)和要发布的对象(如表、视图、存储过程)。 - 对于无主键的表,系统会提示并自动添加主键。 - 设置作业计划,例如每分钟执行一次以实现快速同步。 - 设置快照代理安全性,...

    SQL语句子查询sqlserver2000数据库[总结].pdf

    在SQL Server 2000中,子查询是一个非常重要的概念,它允许在更大的查询结构中嵌套SELECT语句,以实现更复杂的检索、更新和过滤数据的逻辑。 子查询可以在多种SQL语句中使用,包括SELECT、INSERT、UPDATE和DELETE,...

    SQL Server行转列的方法解析

    假设我们有一个名为`@tb`的临时表,存储了`cid`(分类ID)和`cname`(分类名称)两列数据: ```sql DECLARE @tb TABLE (cid INT, cname VARCHAR(10)) INSERT INTO @tb SELECT 1, 'aa' UNION ALL SELECT 2, 'bb' ...

    三种研发过程中提高SQL性能方法的分析.pdf

    本文分析了三种在SQL研发过程中提高性能的方法,包括优化JOIN操作、合理使用IDENTITY属性值以及创建内嵌视图与临时表的应用。下面是对这些知识点的详细解释。 一、JOIN操作的优化 在数据库查询中,JOIN操作是一个...

    SQL Server SELECT

    - 如果新表名称以 `#` 开头,则创建的是临时表。 - **实例**:创建一个与 `xs` 表结构相同的新表 `xs_new`,但不包含任何数据。 ```sql SELECT * INTO xs_new FROM xs WHERE 6 > 8; // 逻辑上不会返回任何数据...

    SQLServer 2008中SQL增强之一:Values新用途

    在传统的SQL语法中,`VALUES`通常用于插入单行或多行数据到已存在的表格中,而在SQL Server 2008中,它还可以作为一个构造器,创建出一种类似表格的结果集,而无需实际的物理表或临时表。 首先,我们来看一个简单的...

    SqlServer 序号列的实现方法

    对于 SQL SERVER 2000 及更早的版本,需要使用一个自增列,结合临时表来实现。 代码如下:SELECT [AUTOID] = IDENTITY(int,1,1), * INTO #temp_table FROM 表名; 代码如下:SELECT * FROM #temp_table; 从 SQL SERVER ...

Global site tag (gtag.js) - Google Analytics