CTE表--SQLSERVER2005看得见的性能提升

本文介绍了SQL中子查询的类型及其性能问题,并提出使用CTE表(Common Table Expression)来提高查询效率的方法。通过固定常用子查询的结果,避免了每次查询都重新生成计划的问题,从而显著提高了性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

common table expression

相信很多朋友都有过子查询的编写经历,我在以前工作中也经常会用到,子查询分两种,一种是嵌套子查询,一种是相关子查询。这两种查询的性能都不高,尤其是相关子查询的性能非常低,原因在于子查询所构造出来的“临时表”是以语句的形式出现的,每次执行查询的时候都要做一次查询的全过程(包括语法分析、解析、优化、执行,然后得到数据,再来执行外查询),性能自然很低。为了解决这个状况,在SQLSERVER2000时经常会将一些常用子查询所到的结果固定成一张表,这样不必反复生成查询计划,效果会高很多,但负面作用是提升了管理成本,现在有了CTE表就好了,两方面问题全都可以得到解决,不信各位可以自己试一下,效果显而易见。

语法在联机帮助上有,自己去查详细的吧,列举一个例子:

USE AdventureWorks;
GO
WITH DirReps(ManagerID, DirectReports) AS 
(
     SELECT ManagerID, COUNT(*) 
     FROM HumanResources.Employee AS e
     WHERE ManagerID IS NOT NULL
     GROUP BY ManagerID
)
SELECT ManagerID, DirectReports 
FROM DirReps 
ORDER BY ManagerID;
GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值