2012-03-08 14 views
5

Napisałem zapytanie w SQL Server 2008. Zapytanie trwa około 4 minut. Musisz mieć to zapytanie jako View. Więc stworzyliśmy widok z tego zapytania i gdy próbuję uruchomić skrypt tworzenia widoku, pokazuje następujący błąd:Wystąpił błąd "Upłynął limit czasu" podczas wykonywania widoku w SQL Server 2008

Timeout Expired.
The timeout period elapsed prior to completion of the operation or the server is not responding.

kwerenda jest:

SELECT t.jrnno, 
     (SELECT SUM(t1.amount) 
      FROM dbo.T_sh AS t1 
     WHERE (t1.b_or_s = '1') AND (t1.jrnno = t.jrnno)) AS buy, 
     (SELECT SUM(t2.amount) 
      FROM dbo.T_sh AS t2 
     WHERE (t2.b_or_s = '2') AND (t2.jrnno = t.jrnno)) AS sale, 
     SUM(t.amount) AS Total, 
     SUM(t.h_crg) AS Howla, 
     SUM(t.l_crg) AS Laga, 
     SUM(t.taxamt) AS Tax, 
     SUM(t.commsn) AS Commission 
    FROM dbo.T_sh AS t 
WHERE (t.tran_type = 'S') 
    AND (t.jrnno NOT IN (SELECT DISTINCT jrnno 
          FROM dbo.T_ledger)) 
GROUP BY t.jrnno 

T_sh i T_ledger zarówno tabele mają około 100 tysięcy wierszy. Jaki może być możliwy powód i jak mogę go pokonać?

Aktualizacja:

select 
    t.jrnno, 
    SUM(CASE WHEN t.b_or_s = 1 THEN t.amount ELSE NULL END) buy, 
    SUM(CASE WHEN t.b_or_s = 2 THEN t.amount ELSE NULL END) sale, 
    SUM(t.amount) AS Total, 
    SUM(t.h_crg) AS Howla, 
    SUM(t.l_crg) AS Laga, 
    SUM(t.taxamt) AS Tax, 
    SUM(t.commsn) AS Commission 
FROM 
    dbo.t_sh t 
WHERE 
    t.tran_type = 'S' 
    AND NOT EXISTS(SELECT 1 FROM dbo.T_ledger x where x.jrnno = t.jrnno) 
group by 
    t.jrnno 

się rozwiązać mój problem. Dziękuję wszystkim za szybką odpowiedź.

Odpowiedz

4

Spróbuj zapytanie:

select 
t.jrno, 
SUM(CASE WHEN t1.b_or_s = 1 THEN t.amount ELSE NULL END) buy, 
SUM(CASE WHEN t1.b_or_s = 2 THEN t.amount ELSE NULL END) sale, 
SUM(t.amount) AS Total, 
SUM(t.h_crg) AS Howla, 
SUM(t.l_crg) AS Laga, 
SUM(t.taxamt) AS Tax, 
SUM(t.commsn) AS Commission 
FROM dbo.t_sh t 
WHERE t.tran_type = 'S' 
AND NOT EXISTS(SELECT 1 FROM dbo.T_ledger x x.jrno = t.jrno) 
+0

świetnie. Działa jak magia. Wykonanie trwało 2 sekundy. wcześniej nie używał "NOT EXISTS". dzięki. –

2

Zapytanie musi jedynie zeskanować dbo.T_sh raz:

SELECT t.jrnno, 
     SUM(CASE WHEN t.b_or_s = 1 THEN t.amount ELSE NULL END) AS buy, 
     SUM(CASE WHEN t.b_or_s = 2 THEN t.amount ELSE NULL END) AS sale, 
     SUM(t.amount) AS Total, 
     SUM(t.h_crg) AS Howla, 
     SUM(t.l_crg) AS Laga, 
     SUM(t.taxamt) AS Tax, 
     SUM(t.commsn) AS Commission 
    FROM dbo.T_sh AS t 
    WHERE t.tran_type = 'S' 
    AND t.jrnno NOT IN (SELECT DISTINCT 
           tl.jrnno 
          FROM dbo.T_ledger tl) 
GROUP BY t.jrnno 
+0

wielki. ale nadal pokazuje ten sam problem. Dzięki. –

Powiązane problemy