我写个存储过程,放如参数运行非常慢,8分多种都没个结果的,但是把里面的SQL拿出来同样带入变量,一样的数据40秒就出来,弄了半天,实在没办法了...
代码如下:
ALTER PROCEDURE [dbo].[SP_Mark_IVRXINGYUAN]
             @CurrentDate NVARCHAR(10)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @IFEXEC INT
SELECT @IFEXEC=0
SELECT @IFEXEC=COUNT(1) FROM DBO.ERRORTIMELISTS(NOLOCK) 
WHERE ErrorTime = @CurrentDate AND IsIMusic=10
IF @IFEXEC=0
BEGIN
        INSERT OPENROWSET('SQLOLEDB','255.255.255.255';'null';'null',
  DB_MARK.dbo.Mark_IVRXINGYUAN)
        SELECT P.DATE
  ,ISNULL(A.TIMEST,0) 拨打总次数
  ,ISNULL(E.TIMEST,0) 信元日志订购次数
  ,ISNULL(A.TIMESP,0) 挂机人数
  ,ISNULL(B.TIMEST,0) 下发次数
  ,ISNULL(C.TIMEST,0) 回拨次数
  ,ISNULL(D.TIMEST,0) 挂机订购次数
  ,ISNULL(B.TIMESP,0) 下发人数
  ,ISNULL(C.TIMESP,0) 回拨人数
  ,ISNULL(D.TIMESp,0) 挂机订购人数
  ,ISNULL(F.TIMEST,0) [10S挂机次数]
  ,ISNULL(F.TIMESP,0) [10S挂机人数]
  ,ISNULL(G.TIMEST,0) [LC订购次数]
  ,ISNULL(H.TIMEST,0) [LC信元订购次数]
  ,NULL 
  ,NULL
  ,ISNULL(I.TIMEST,0) [10S挂机订购次数]
  ,ISNULL(I.TIMESP,0) [10S挂机订购人数]
   FROM
  (SELECT DATE FROM DBO.DIM_DATE WHERE [email=DATE=@CurrentDate]DATE=@CurrentDate[/email]) P
  LEFT JOIN
  (SELECT CURRENTDATE,COUNT(CURRENTDATE) TIMEST,COUNT(DISTINCT CALLER_NUM) TIMESP
   FROM
  (
  SELECT CURRENTDATE,CALLER_NUM
  FROM DBO.IVR_CALL_HISTORY(NOLOCK) WHERE CURRENTDATE [email==@CurrentDate]=@CurrentDate[/email]
  AND KEY_TYPE='100'
  GROUP BY CURRENTDATE,UNI_CODE,CALLER_NUM
  ) A
  GROUP BY CURRENTDATE) A ON P.DATE=A.CURRENTDATE
  LEFT JOIN
  (SELECT CURRENTDATE,COUNT(CURRENTDATE) TIMEST,COUNT(DISTINCT CALLER_NUM) TIMESP
   FROM
  (
  SELECT CURRENTDATE,CALLER_NUM
  FROM DBO.IVR_CALL_HISTORY(NOLOCK) WHERE CURRENTDATE [email==@CurrentDate]=@CurrentDate[/email]
  AND KEY_TYPE='100'
  AND (SENDSMS = 1)
  GROUP BY CURRENTDATE,UNI_CODE,CALLER_NUM
  ) B
  GROUP BY CURRENTDATE) B ON P.DATE=B.CURRENTDATE
  LEFT JOIN
  (
  SELECT CURRENTDATE,COUNT(CURRENTDATE) TIMEST, COUNT(DISTINCT CALLER_NUM) TIMESP FROM 
  (
  SELECT A.CURRENTDATE,A.CALLER_NUM FROM 
  (SELECT CURRENTDATE,CALLER_NUM,START_TIME FROM DBO.IVR_CALL_HISTORY(NOLOCK)
  WHERE CURRENTDATE [email==@CurrentDate]=@CurrentDate[/email]
  AND KEY_TYPE = '100') A
  RIGHT JOIN (
  SELECT CURRENTDATE,CALLER_NUM, MIN(START_TIME) START_TIME FROM DBO.IVR_CALL_HISTORY
  WHERE CURRENTDATE [email==@CurrentDate]=@CurrentDate[/email]
  AND KEY_TYPE = '100'
  AND (SENDSMS = 1)
  GROUP BY CALLER_NUM,CURRENTDATE) B
  ON A.CALLER_NUM = B.CALLER_NUM 
  WHERE A.START_TIME > B.START_TIME
  )XX
  GROUP BY CURRENTDATE
  ) C ON P.DATE=C.CURRENTDATE
  LEFT JOIN
  (
  SELECT CURRENTDATE,COUNT(CURRENTDATE) TIMEST FROM
        (
        SELECT CURRENTDATE FROM DBO.IVR_OPER_HISTORY
  WHERE (GATE_TYPE='订购铃音盒' OR GATE_TYPE='下载铃音' OR 
  GATE_TYPE='下载铃音_外呼' OR GATE_TYPE='赠送铃音')
  AND CURRENTDATE [email==@CurrentDate]=@CurrentDate[/email]
  AND RETURE_CODE=0
        GROUP BY CURRENTDATE,UNI_CODE
        ) XX 
  GROUP BY CURRENTDATE
  ) E ON P.DATE=E.CURRENTDATE
  LEFT JOIN
  (SELECT CURRENTDATE,COUNT(CURRENTDATE) TIMEST,COUNT(DISTINCT CALLER_NUM) TIMESP
   FROM
  (
  SELECT CURRENTDATE,CALLER_NUM
  FROM DBO.IVR_CALL_HISTORY WHERE CURRENTDATE [email==@CurrentDate]=@CurrentDate[/email]
  AND KEY_TYPE='100'
  AND DATEDIFF(second,START_TIME,END_TIME)<=10
  GROUP BY CURRENTDATE,UNI_CODE,CALLER_NUM
  ) XX
  GROUP BY CURRENTDATE) F ON P.DATE=F.CURRENTDATE
  LEFT JOIN
  (SELECT CURRENTDATE,COUNT(CURRENTDATE) TIMEST,COUNT(DISTINCT CALLER_ID) TIMESP
   FROM dbo.LC_Order_History WHERE SOURCE_TYPE=0 AND OP_STATUS=0
         AND [email=CurrentDate=@CurrentDate]CurrentDate=@CurrentDate[/email] 
  GROUP BY CURRENTDATE) G ON P.DATE=G.CURRENTDATE
  LEFT JOIN
  (SELECT CURRENTDATE,COUNT(CURRENTDATE) TIMEST,COUNT(DISTINCT CALLER_ID) TIMESP
   FROM dbo.LC_Order_History WHERE SOURCE_TYPE=0 AND OP_STATUS=0
         AND source_code='11001'
         AND [email=CurrentDate=@CurrentDate]CurrentDate=@CurrentDate[/email] 
  GROUP BY CURRENTDATE) H ON P.DATE=H.CURRENTDATE
        LEFT JOIN
       (
  SELECT CURRENTDATE,COUNT(CURRENTDATE) TIMEST,COUNT(DISTINCT CALLER_NUM) TIMESP FROM
  (
  SELECT CURRENTDATE,CALLER_NUM,UNI_CODE FROM  DBO.IVR_OPER_HISTORY
  WHERE (GATE_TYPE='订购铃音盒' OR GATE_TYPE='下载铃音' OR 
  GATE_TYPE='下载铃音_外呼' OR GATE_TYPE='赠送铃音')
  AND CURRENTDATE [email==@CurrentDate]=@CurrentDate[/email]
  AND RETURE_CODE=0
  ) A
  RIGHT JOIN
  (
  SELECT A.UNI_CODE FROM 
  (
   SELECT CALLER_NUM,UNI_CODE,START_TIME FROM DBO.IVR_CALL_HISTORY 
   WHERE CURRENTDATE [email==@CurrentDate]=@CurrentDate[/email]
   AND KEY_TYPE = '100'
  ) A
  RIGHT JOIN (
  SELECT CURRENTDATE,CALLER_NUM, MIN(START_TIME) START_TIME FROM DBO.IVR_CALL_HISTORY
  WHERE CURRENTDATE [email==@CurrentDate]=@CurrentDate[/email]
  AND KEY_TYPE = '100'
  AND (SENDSMS = 1)
  GROUP BY CALLER_NUM,CURRENTDATE) B
  ON A.CALLER_NUM = B.CALLER_NUM 
  WHERE A.START_TIME > B.START_TIME
  ) B ON A.UNI_CODE=B.UNI_CODE
  WHERE A.UNI_CODE IS NOT NULL
  GROUP BY CURRENTDATE
    ) D ON P.DATE=D.CURRENTDATE
       LEFT JOIN
       (
  SELECT CURRENTDATE,COUNT(CURRENTDATE) TIMEST,COUNT(DISTINCT CALLER_NUM) TIMESP FROM
  (
  SELECT CURRENTDATE,CALLER_NUM,UNI_CODE FROM  DBO.IVR_OPER_HISTORY
  WHERE (GATE_TYPE='订购铃音盒' OR GATE_TYPE='下载铃音' OR 
  GATE_TYPE='下载铃音_外呼' OR GATE_TYPE='赠送铃音')
  AND CURRENTDATE [email==@CurrentDate]=@CurrentDate[/email]
  AND RETURE_CODE=0
  ) A
  RIGHT JOIN
  (
  SELECT A.UNI_CODE FROM 
  (
   SELECT CALLER_NUM,UNI_CODE,START_TIME FROM DBO.IVR_CALL_HISTORY 
   WHERE CURRENTDATE [email==@CurrentDate]=@CurrentDate[/email]
   AND KEY_TYPE = '100'
  ) A
  RIGHT JOIN (
  SELECT CURRENTDATE,CALLER_NUM, MIN(START_TIME) START_TIME FROM DBO.IVR_CALL_HISTORY
  WHERE CURRENTDATE [email==@CurrentDate]=@CurrentDate[/email]
  AND KEY_TYPE = '100'
  GROUP BY CALLER_NUM,CURRENTDATE) B
  ON A.CALLER_NUM = B.CALLER_NUM 
  WHERE A.START_TIME > B.START_TIME
  ) B ON A.UNI_CODE=B.UNI_CODE
  WHERE A.UNI_CODE IS NOT NULL
  GROUP BY CURRENTDATE
  ) I ON P.DATE=I.CURRENTDATE
    END
END