2012-05-23 4 views
0

Хранимая процедура:хранимой процедуры слишком много раз

CREATE PROCEDURE [dbo].[spManagedRouteSheetList] 
@dStartDate DateTime, 
@dEndDate DateTime 
AS 
BEGIN 
SELECT IT.TriggerParentID,IT.ProductID, IT.[Weight],IT.[DateTime],IT.ProductType,IT.InOutType,IT.TriggerParentType FROM ITransaction IT 
    WHERE IT.InOutType=101 and IT.LotID in (select ManagedLotID from RSInQCDetail where YarnFormat <>4 and ManagedLotID>0) 
    AND IT.[DateTime]>[email protected] AND IT.[DateTime]<@dEndDate 

    --YarnCategory 
    SELECT YarnCategoryID,Name,Code FROM YarnCategory WHERE YarnCategoryID IN (SELECT Distinct ProductID FROm ITransaction IT WHERE IT.InOutType=101 and IT.LotID in (select ManagedLotID from RSInQCDetail where YarnFormat <>4 and ManagedLotID>0) 
    AND IT.[DateTime]>[email protected] AND IT.[DateTime]<@dEndDate) 

    --RouteSheet 
    SELECT RouteSheetID,RoutesheetNo, ReqYarnQty, [date],RSState,Shift,Subfactory,(SELECT Name FROM Location WHERE LocationID=Subfactory) 
    FROM Routesheet where RoutesheetID IN (SELECT distinct IT.TriggerParentID FROM ITransaction IT WHERE IT.InOutType=101 and IT.LotID in (select ManagedLotID from RSInQCDetail where YarnFormat <>4 and ManagedLotID>0) 
    AND IT.[DateTime]>[email protected] AND IT.[DateTime]<@dEndDate) 

    --RSInQCDetail 
    SELECT RouteSheetID,Qty,YarnFormat,ManagedLotID FROM RSInQCDetail WHERE RouteSheetID IN  (SELECT distinct IT.TriggerParentID FROM ITransaction IT WHERE IT.InOutType=101 and IT.LotID in (select ManagedLotID from RSInQCDetail where YarnFormat <>4 and ManagedLotID>0) 
    AND IT.[DateTime]>[email protected] AND IT.[DateTime]<@dEndDate) 


    --RouteSheet History 
    SELECT RouteSheetID,YarnQtyInLBS,[Event] from RouteSheetHistoryEnhance WHERE EVENt IN (14) 
    AND RouteSheetID IN (SELECT distinct IT.TriggerParentID FROM ITransaction IT WHERE IT.InOutType=101 and IT.LotID in 
    (select ManagedLotID from RSInQCDetail where YarnFormat <>4 and ManagedLotID>0) 
    AND IT.[DateTime]>[email protected] AND IT.[DateTime]<@dEndDate) 

END 

Выполнение процедуры:

EXECUTE dbo.[spManagedRouteSheetList] '21 May 2012 08:00:00','22 May 2012 08:00:00'.. 

Это займет 2 СУИ, но если я выполнить следующий запрос он принимает только 1 или 3 секунды

DECLARE @dStartDate as datetime 
     ,@dEndDate as datetime 

     SET @dStartDate='21 May 2012 08:00:00' 
     SET @dEndDate='22 May 2012 08:00:00' 


SELECT IT.TriggerParentID,IT.ProductID, IT.[Weight],IT.[DateTime],IT.ProductType,IT.InOutType,IT.TriggerParentType FROM ITransaction IT 
    WHERE IT.InOutType=101 and IT.LotID in (select ManagedLotID from RSInQCDetail where YarnFormat <>4 and ManagedLotID>0) 
    AND IT.[DateTime]>[email protected] AND IT.[DateTime]<@dEndDate 

    --YarnCategory 
    SELECT YarnCategoryID,Name,Code FROM YarnCategory WHERE YarnCategoryID IN (SELECT Distinct ProductID FROm ITransaction IT WHERE IT.InOutType=101 and IT.LotID in (select ManagedLotID from RSInQCDetail where YarnFormat <>4 and ManagedLotID>0) 
    AND IT.[DateTime]>[email protected] AND IT.[DateTime]<@dEndDate) 

    --RouteSheet 
    SELECT RouteSheetID,RoutesheetNo, ReqYarnQty, [date],RSState,Shift,Subfactory,(SELECT Name FROM Location WHERE LocationID=Subfactory) 
    FROM Routesheet where RoutesheetID IN (SELECT distinct IT.TriggerParentID FROM ITransaction IT WHERE IT.InOutType=101 and IT.LotID in (select ManagedLotID from RSInQCDetail where YarnFormat <>4 and ManagedLotID>0) 
    AND IT.[DateTime]>[email protected] AND IT.[DateTime]<@dEndDate) 

    --RSInQCDetail 
    SELECT RouteSheetID,Qty,YarnFormat,ManagedLotID FROM RSInQCDetail WHERE RouteSheetID IN  (SELECT distinct IT.TriggerParentID FROM ITransaction IT WHERE IT.InOutType=101 and IT.LotID in (select ManagedLotID from RSInQCDetail where YarnFormat <>4 and ManagedLotID>0) 
    AND IT.[DateTime]>[email protected] AND IT.[DateTime]<@dEndDate) 


    --RouteSheet History 
    SELECT RouteSheetID,YarnQtyInLBS,[Event] from RouteSheetHistoryEnhance WHERE EVENt IN (14) 
    AND RouteSheetID IN (SELECT distinct IT.TriggerParentID FROM ITransaction IT WHERE IT.InOutType=101 and IT.LotID in `` 
    (select ManagedLotID from RSInQCDetail where YarnFormat <>4 and ManagedLotID>0) 
    AND IT.[DateTime]>[email protected] AND IT.[DateTime]<@dEndDate) 

Итак, в чем проблема с хранимой процедурой?

+1

Что говорит план выполнения? – sharptooth

+0

Для какой базы данных? (postgres, mysql и т. д. - добавьте соответствующий тег) – Bohemian

+2

Параметр sniffing? Взгляни на; http://www.sommarskog.se/query-plan-mysteries.html –

ответ

0

Если это для SQL Server ...

Это не обязательно является идеальным решением, но оно также может устранить разницу вы видите.

Постарайтесь добавить WITH RECOMPILE в определение хранимой процедуры.

CREATE PROCEDURE [dbo].[spManagedRouteSheetList] 
    @dStartDate DateTime, 
    @dEndDate DateTime 
WITH RECOMPILE 
AS ... 
+0

Я попытался добавить «WITH RECOMPILE» в определение процедуры хранения, но не работал. –

+0

@ Md.MasudIqbal Используете ли вы MS SQL Server? –

+0

да я использую SQL Server 2008 –

Смежные вопросы