하루로드로 5 분이 걸립니다. 매개 변수화 된 저장 프로 시저로 변경하고 실행 계획에서 권장하는대로 인덱스를 적용하고 하루는 47 초로 떨어졌지만 월로드는 영원히 떨어졌습니다. 무엇이 문제 일 수 있습니까? 평균 일일로드는 약 50,000 행입니다.1 분 미만의 하루로드 및 1 달의로드는 테이블 변수에서 수 시간이 걸립니다.
USE [DBl]
--[dbo].[ClosedOrder] StartDate, '@EndDate'
ALTER PROCEDURE [dbo].[ClosedOrders]
(@StartDate DATETIME
,@EndDate DATETIME
)
AS
DECLARE @temp_dec DECIMAL(15,2) = 0.00
DECLARE @temp_int int = NULL
DECLARE @temp_str nvarchar(60) = NULL
DECLARE @temp_date Date = NULL
-- Michael Xia changes temp table to table variable on 05/24/2016
DECLARE @lines TABLE
(
SalesOrderID nvarchar (20),
SalesOrderLine smallint,
CustomerID_SoldTo nvarchar (14),
OrderDate date,
)
INSERT INTO @lines
SELECT
-- multiple sub queries like below
, (SELECT TOP 1 CAST(sh.ship_date AS DATE)
FROM dbl.dbo.[Shipments] sh (NOLOCK)
WHERE sh.co_num = coi.co_num AND sh.co_line = coi.co_line
AND sh.shipped=3
ORDER BY sh.ship_date DESC) 'DateLastShipped'
---multiple update to the table variable using scalar function like below
UPDATE @lines
SET __ServiceLevelDays = CASE
WHEN ScheduledToShipDate = ShipNoLaterThanDate THEN 1
ELSE [dbl].[dbo].GetNumberOfBays(SchlShipDate,ShipNoLaterThanDate,1) + 1
END
TRUNCATE TABLE [DBL].[dbo].[ClosedOrder]
INSERT INTO [DBL].[dbo].[ClosedOrder]
(
)
SELECT
*
FROM @lines
END
내가 이것을 조사하고 있었다면 (매월 INSERT INTO @ lines'에서) 서브 쿼리를 개별적으로 매월로드 매개 변수 값으로 실행하고 무엇이 두드러 지는지 살펴 보겠습니다. –
프로 시저에서 입력 변수를 사용하지 않습니다. 아마도 당신은 전체 절차를 게시하지 않았을 것입니다. 어쨌든 이것은 매개 변수 스니핑 일 수 있습니다. SP에 'WITH RECOMPILE'을 추가하여 무차별 대처할 수 있습니다. 아니면 단지 많은 시간이 걸릴 수도 있습니다. 한 달에 몇 개의 기록이 있습니까? –
변수는 SQL 에이전트 작업 단계에서 전달됩니다. 나는 물리적 테이블에 대한 select 문에서 재 컴파일 옵션을 사용했다. 우리는 한 달에 평균 430k를로드합니다. – Projack