Проблема производительности в SQL - PullRequest
0 голосов
/ 11 октября 2011

Привет, друзья, у меня большие проблемы.

У меня есть запрос, выполнение которого занимает около 20 минут. (4,5 крора записи).

Это запрос.

  SELECT 
     a.cmddefinitionid,

     b.cmdinstanceid,

     b.mobileid,

     d.phonenumber,

     d.hardwareid,

     d.smsemail,

     a.cmdid,

     c.cmdname,

     c.cmdxmldesc,

     a.eventflag,

     a.recurrenceflag,

     a.paramflag,

     a.filename,

     a.paramname,

     a.VALUE,

     a.meterflag,

     a.gosilentflag,

     a.regurl,

     b.scheduleddate,

   --  e.TxnTypeID, -- Added 



    e.TxnID,-- Added

    e.StatusMsg,-- Added

    b.LastModified as TimeCreated,-- Added newly

    d.PanelistID -- Added newly

FROM   

 ( select CmdInstanceID, TxnTypeID, TxnID, StatusMsg

              from  ODM_TDCS.dbo.CMD_TXN

              where TxnTypeID < 3 

              and TxnID IN (

              select max(TxnID)

              from ODM_TDCS.dbo.CMD_TXN                 

              group by CmdInstanceID)

  ) AS e, 

  dbo.cmd_definition AS a, 
  dbo.cmd_instance AS b, 
  dbo.lu_cmd AS c,
  dbo.lu_mobile AS d
  WHERE  
  a.cmddefinitionid = b.cmddefinitionid 
  and 
  a.cmdid = c.cmdid and b.mobileid = d.mobileid and 
  b.cmdtypeid = 2 AND
  b.scheduleddate > Getdate() - 2 AND
  b.CmdInstanceID = e.CmdInstanceID

Теперь из этого:

select CmdInstanceID, TxnTypeID, TxnID, StatusMsg
            from  ODM_TDCS.dbo.CMD_TXN
            where TxnTypeID < 3 
            and TxnID IN (
            select max(TxnID)
            from ODM_TDCS.dbo.CMD_TXN           
            group by CmdInstanceID)

это занимает более 5 минут, но если я уберу это условие, запрос будет выполнен в

0.17 sec.

Любая помощь или предложение ??

1 Ответ

0 голосов
/ 11 октября 2011

Попробуйте с этим ...

ВЫБЕРИТЕ a.cmddefinitionid,

 b.cmdinstanceid,

 b.mobileid,

 d.phonenumber,

 d.hardwareid,

 d.smsemail,

 a.cmdid,

 c.cmdname,

 c.cmdxmldesc,

 a.eventflag,

 a.recurrenceflag,

 a.paramflag,

 a.filename,

 a.paramname,

 a.VALUE,

 a.meterflag,

 a.gosilentflag,

 a.regurl,

 b.scheduleddate,

- e.TxnTypeID, - Добавлено

e.TxnID,-- Added

e.StatusMsg,-- Added

b.LastModified as TimeCreated,-- Added newly

d.PanelistID -- Added newly

FROM   

 (Select * from (
select CmdInstanceID, TxnTypeID, TxnID, StatusMsg, 
ROW_NUMBER() over (partition by CmdInstanceID order by TxnID desc ) as Row
from  ODM_TDCS.dbo.CMD_TXN
where TxnTypeID < 3 
)as t where e.Row = 1

) AS e, 

  dbo.cmd_definition AS a, 
  dbo.cmd_instance AS b, 
  dbo.lu_cmd AS c,
  dbo.lu_mobile AS d
  WHERE  
  a.cmddefinitionid = b.cmddefinitionid 
  and 
  a.cmdid = c.cmdid and b.mobileid = d.mobileid and 
  b.cmdtypeid = 2 AND
  b.scheduleddate > Getdate() - 2 AND
  b.CmdInstanceID = e.CmdInstanceID

Только что использованный номер строкифункция, и это позволит избежать повторного перемещения ODM_TDCS.dbo.CMD_TXN.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...