gespeicherte Prozedur die Ausführung, die lange Zeit in sql server

Ich habe eine Tabelle namens Transaction_tbl mit mehr als 400 000 Einträge. Dies ist die Struktur der Tabelle:

CREATE TABLE [dbo].[Transaction_tbl](
    [transactID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
    [TBarcode] [varchar](20) NULL,
    [cmpid] [int] NULL,
    [Locid] [int] NULL,
    [PSID] [int] NULL,
    [PCID] [int] NULL,
    [PCdID] [int] NULL,
    [PlateNo] [varchar](20) NULL,
    [vtid] [int] NULL,
    [Compl] [bit] NULL,
    [self] [bit] NULL,
    [LstTic] [bit] NULL,
    [Gticket] [int] NULL,
    [Cticket] [int] NULL,
    [Ecode] [varchar](50) NULL,
    [dtime] [datetime] NULL,
    [LICID] [int] NULL,
    [PAICID] [int] NULL,
    [Plot] [varchar](50) NULL,
    [mkid] [int] NULL,
    [mdlid] [int] NULL,
    [Colid] [int] NULL,
    [Comments] [varchar](100) NULL,
    [Kticket] [int] NULL,
    [PAmount] [numeric](18, 2) NULL,
    [Payid] [int] NULL,
    [Paid] [bit] NULL,
    [Paydate] [datetime] NULL,
    [POICID] [int] NULL,
    [DelDate] [datetime] NULL,
    [DelEcode] [nvarchar](50) NULL,
    [PAICdate] [datetime] NULL,
    [KeyRoomDate] [datetime] NULL,
    [Status] [int] NULL,
 CONSTRAINT [PK_Transaction_tbl] PRIMARY KEY CLUSTERED 
(
    [transactID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

Habe ich einen nicht gruppierten index auf die Locid, dtime Spalte.
Ich habe eine gespeicherte Prozedur wie diese:

ALTER procedure [dbo].[IBS_fetchreleasedinpodiumgridnew]
   @locid INTEGER = NULL
AS BEGIN
   SET NOCOUNT ON
  DECLARE @TodayMinus7Days DATETIME
Declare @krrt integer
Declare @DT integer
   SET @TodayMinus7Days = getdate()-1



SELECT  
       t.TBarcode, t.PlateNo, t.DelEcode,cast(t.Paydate as Time) [REQ],
       datediff(MINUTE, t.PayDate,
             CASE t.Status
                WHEN 3 THEN GETDATE()
                WHEN 4 THEN t.KeyRoomDate
                When 5 THEN  t.KeyRoomDate
                End) as KRRT,

             datediff(MINUTE,t.PayDate,
             CASE t.Status
              WHEN 3 THEN GETDATE()
              WHEN 4 THEN GETDATE()
             WHEN 5 THEN t.DelDate
             END) as DT

   FROM    
       dbo.Transaction_tbl t

   WHERE   

   ( 
       ([status] IN (3,4))
       OR 
       ([status] = 5 AND DATEDIFF(n, DelDate, GETDATE()) <= 3)
   )
   AND locid = 6 AND dtime >= @TodayMinus7Days
   ORDER BY  
       paydate 
       end

meine execution-plan wie dieser:
gespeicherte Prozedur die Ausführung, die lange Zeit in sql server

aber die meisten der Zeit, diese lange Zeit zu führen ..in diesem Fall, wie kann ich verbessern meine Ausführung einer gespeicherten Prozedur Auftritt?

jede andere Methode, die ich verwenden möchten..jede Hilfe ist sehr appriciable.Dank

den Ausführungsplan für die Abfrage zeigt, ist die Sortierung, die lange Zeit..also wenn ich den index auf paydate meine Abfrage-performance steigern?
stattdessen dtime >= @TodayMinus7Days ich code wie diesen:

dtime >= OPTION (optimize for (@TodayMinus7Days))

aber immer Fehler:Falsche syntax bei das Schlüsselwort 'OPTION'.

  • Sortieren Sie nimmt die längste Zeit, wie kann man aus der Abfrage-plan.
  • Zu mir; ORDER BY paydate ist der Schuldige hier. Versuchen Sie, erstellen Sie einen index auf paydate (ODER) die Verwendung einer indizierten Spalte in der Reihenfolge von
  • Gibt es etwas, was du nicht bist uns zu zeigen? Dieser plan schlägt vor, ein inner join, der sollte nicht existieren.
  • 1), Was "nicht mehr als 4 fehlende Einträge" bedeuten. 2) Grob, wie viele Zeilen, die Sie zurückgeben, wenn es "langsam" ist. 3) Wie langsam? e.g, 2 Sek. 20 min, etc. 4) Warum ist @TodayMinus7Days = getdate()-1. 5) Haben Sie versucht, MIT (INDEX (Your_Locid_dtime_Index)) 6) Haben Sie versucht, einen Hinweis ähnlich " - option (optimize for (@TodayMinus7Days = '2000-01-01'))"
  • Nachdem ich während, ich glaube, ich kann mir vorstellen, dass Ihr wählen Sie ist wahrscheinlich mit der Ihr Locid_dtime index-obwohl die Abfrage-plan Bild nicht sicher -- Wenn man nur die PK und die 1 index, den Sie erwähnen, ist es mit dem index, ich schlug in der Spur.
  • Den Abfrageplan nicht in der Abfrage-plan, der die gespeicherte Prozedur. Holen Sie sich einen Abfrage-plan auf "exec IBS_fetchreleasedinpodiumgridnew"
  • wenn jemals zurückgeben, die mehr als 20 Zeilen,wird dieser immer langsamer..um die 30 Sekunden, es s unter ausführen?
  • getdate()-1 bedeutet, dass die letzten 24 Stunden Daten aus der Tabelle
  • wenn ich erklärt... OPTION (OPTIMIZE FOR (@TodayMinus7Days UNBEKANNT))..was ist das,

InformationsquelleAutor user3262364 | 2014-05-12
Schreibe einen Kommentar