WEB开发网
开发学院数据库MSSQL Server SQL Server性能优化综述 阅读

SQL Server性能优化综述

 2008-08-27 09:57:43 来源:WEB开发网   
核心提示: 游标是把结果集放在服务器内存,并通过循环一条一条处理记录,SQL Server性能优化综述(9),对数据库资源(特别是内存和锁资源)的消耗是非常大的,所以,2,分别代表主单位、单位1、单位2,我们应该只有在没有其他方法的情况下才使用游标,另外

游标是把结果集放在服务器内存,并通过循环一条一条处理记录,对数据库资源(特别是内存和锁资源)的消耗是非常大的,所以,我们应该只有在没有其他方法的情况下才使用游标。

另外,我们可以用SQL SERVER的一些特性来代替游标,达到提高速度的目的。

A、字符串连接的例子

这是论坛经常有的例子,就是把一个表符合条件的记录的某个字符串字段连接成一个变量。比如需要把JOB_ID=10的EMPLOYEE的FNAME连接在一起,用逗号连接,可能最容易想到的是用游标:

   DECLARE@NAMEVARCHAR(20)
DECLARE@NAMEVARCHAR(1000)
DECLARENAME_CURSORCURSORFOR
SELECTFNAMEFROMEMPLOYEEWHEREJOB_ID=10ORDERBYEMP_ID
OPENNAME_CURSOR
FETCHNEXTFROMRNAME_CURSORINTO@NAME
WHILE@@FETCH_STATUS=0
BEGIN
SET@NAMES=ISNULL(@NAMES+’,’,’’)+@NAME
FETCHNEXTFROMNAME_CURSORINTO@NAME
END
CLOSENAME_CURSOR
DEALLOCATENAME_CURSOR

可以如下修改,功能相同:

   DECLARE@NAMEVARCHAR(1000)
SELECT@NAMES=ISNULL(@NAMES+’,’,’’)+FNAME
FROMEMPLOYEEWHEREJOB_ID=10ORDERBYEMP_ID

B、 用CASE WHEN 实现转换的例子

很多使用游标的原因是因为有些处理需要根据记录的各种情况需要作不同的处理,实际上这种情况,我们可以用CASE WHEN语句进行必要的判断处理,而且CASE WHEN是可以嵌套的。比如:

   表结构:
CREATETABLE料件表(
料号VARCHAR(30),
名称VARCHAR(100),
主单位VARCHAR(20),
单位1VARCHAR(20),
单位1参数NUMERIC(18,4),
单位2VARCHAR(20),
单位2参数NUMERIC(18,4)
)
GO
CREATETABLE入库表(
时间DATETIME,
料号VARCHAR(30),
单位INT,
入库数量NUMERIC(18,4),
损坏数量NUMERIC(18,4)
)
GO
其中,单位字段可以是0,1,2,分别代表主单位、单位1、单位2,很多计算需要统一单位,统一单位可以用游标实现:
DECLARE@料号VARCHAR(30),
@单位INT,
@参数NUMERIC(18,4),
DECLARECURCURSORFOR
SELECT料号,单位FROM入库表WHERE单位<>0
OPENCUR
FETCHNEXTFROMCURINTO@料号,@单位
WHILE@@FETCH_STATUS<>-1
BEGIN
IF@单位=1
BEGIN
SET@参数=(SELECT单位1参数FROM料件表WHERE料号=@料号)
UPDATE入库表SET数量=数量*@参数,损坏数量=损坏数量*@参数,单位=1WHERECURRENTOFCUR
END
IF@单位=2
BEGIN
SET@参数=(SELECT单位1参数FROM料件表WHERE料号=@料号)
UPDATE入库表SET数量=数量*@参数,损坏数量=损坏数量*@参数,单位=1WHERECURRENTOFCUR
END
FETCHNEXTFROMCURINTO@料号,@单位
END
CLOSECUR
DEALLOCATECUR
可以改写成:
UPDATEASET
数量=CASEA.单位WHEN1THENA.数量*B.单位1参数
WHEN2THENA.数量*B.单位2参数
ELSEA.数量
END,
损坏数量=CASEA.单位WHEN1THENA.损坏数量*B.单位1参数
WHEN2THENA.损坏数量*B.单位2参数
ELSEA.损坏数量
END,
单位=1
FROM入库表A,料件表B
WHEREA.单位<>1AND
A.料号=B.料号

C、 变量参与的UPDATE语句的例子

上一页  4 5 6 7 8 9 10  下一页

Tags:SQL Server 性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接