我有一系统,系统中有许多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, ...)         //此表保存各项费用编号与名称等此类存储过程关联的表过多,作笛卡儿积后所需空间必定不小。
请问高手如何做优化,以提高速度。

解决方案 »

  1.   

    不是所需空间的问题,而是连接过多后,分析sql的资源耗费会大大增加。
      

  2.   


    做个视图用来查询,再用UPDATE更新
      

  3.   

    优化SQL语句
    一。尽量避免用*号 ,控制传输的数据不是太大。
    二。像SFXM(sfxmid, mc, ...)         //此表保存各项费用编号与名称等
         编号尽量用INT,而不用VARCHAR,这样查询起来更快
    三。90/10规则,把你的主要时间放在重要的10上面而不是90上面
      

  4.   

    如果SELECT用得多,建立索引是个好办法。
      

  5.   

    你写的 SQL 语句对了吗?