日期:2014-05-16  浏览次数:20618 次

存储过程优化
下列是通过“dmv”找出来的一条“查询显示缓存计划所占用的 CPU 总使用率”的存储过程,参考http://technet.microsoft.com/zh-cn/library/bb838723.aspx 
现在想对其进行优化,但是看来看去感觉除了感觉可以讲其中三处 “@Count > @Total”(调整写法后)定义出一个标量之外,感觉没有其他可以优化的,望大神赐教,谢谢!



SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[c_DueConscriptionQueue] 
@ID INT
AS 
IF NOT EXISTS ( SELECT  [ID]
                FROM    [Conscription_Queue]
                WHERE   [ID] = @ID
                        AND [Completed] = 0 ) 
    BEGIN
        RETURN 0
    END 
    
DECLARE @TroopID INT
DECLARE @VillageID INT
DECLARE @UnitTraining INT
DECLARE @NextUnit DATETIME
DECLARE @Total INT 

DECLARE @Count INT 

SELECT  @VillageID = [VillageID], @TroopID = [TroopID], @NextUnit = [NextUnit], @UnitTraining = [UnitTraining], @Total = [Total]
FROM    [Conscription_Queue]
WHERE   [ID] = @ID 

IF ( @UnitTraining <> 0 ) 
    BEGIN
        SET @Count = DATEDIFF(s, @NextUnit, GETDATE()) / @UnitTraining + 1
    END
ELSE 
    BEGIN
        RETURN 0
    END 

--检查是否已存在兵种,不存在新增,存在 增加数量
IF NOT EXISTS ( SELECT  *
                FROM    [Village_Troops]
                WHERE   [VillageID] = @VillageID
                        AND [InVillageID] = @VillageID
                        AND [TroopID] = @TroopID
                        AND [GarrisonType] = 1 ) 
    BEGIN
IF ( @Count > @Total ) 
BEGIN
SET @Count = @Total 
END
INSERT  INTO [Village_Troops] ( [TroopID], [quantity], [VillageID], [InVillageID], [GarrisonType] )
                VALUES  ( @TroopID, @Count, @VillageID, @VillageID, 1 )
    END
ELSE 
    BEGIN
IF ( @Count&n