SQL语句优化
我有一系统,系统中有许多MS SQL的存储过程,其SQL语句实在需要动动手术,敬请各位谋划谋划、指点指点。
以下就是一段典型代码:
CREATE PROCEDURE Proc_Cal_XX_Fee
@Garden varchar (5),
@Year smallint,
@Month tinyint
AS
begin
--更新某某费用
Update tbl_A Set yfje=A.dtf From
(Select yzxx.hzbh, (dtf*ISNULL(ftxs,0)) AS dtf From yzxx, dtf, dtft, zfxx Where yzxx.lh=dtf.lh AND nf=@Year AND yf=@Month
AND dtf.xqbh=@Garden AND yzxx.xqbh=@Garden AND yzxx.hzbh=zfxx.hzbh AND dtft.lc=zfxx.lc AND yzxx.lh=dtft.lh) A,
(Select sfxmid From SFXM Where mc like '%某某费用%') B
Where tbl_A.hzbh=A.hzbh AND tbl_A.sfxmid=B.sfxmid
AND nf=@Year AND yf=@Month
end
其中涉及各表的大致结构如下:
tbl_A (hzbh, nf, yf, sfxmid, yfje, ...) //此表保存用户各月各项费用数据
yzxx(hzbh, xm, xb, lh, ....) //用户的姓名,楼层等
zfxx(hzbh, lh, lc, ...) //各房的面积、楼层等
dtft(lh, lc, ftxs, ...) //此表保存各楼层的分摊系数
dtf(lh, nf, yf, dtf, ...) //此表保存每月费用
SFXM(sfxmid, mc, ...) //此表保存各项费用编号与名称等
此类存储过程关联的表过多,作笛卡儿积后所需空间必定不小。
请问高手如何做优化,以提高速度。