2014-12-03 53 views
1

我有這個疑問:如何提高「具有和」查詢

Select 
    DescFornecedor, DescUsuario, Classificacao, 
    Sum(Tempo) as Tempo, 
    Case Classificacao 
     When 'Agendamento' Then 2 
     When 'Aguardando cadastro' Then 3 
     When 'Descarte' Then 8 
     When 'Desistência' Then 7 
     When 'Em Pausa' Then 4 
     When 'Em Volta' Then 10 
     When 'Entrevista' Then 1 
     When 'Filtro' Then 5 
     When 'Outros' Then 9 
     When 'Recusa' Then 6 
     When 'Sem Atividade' Then 11 
    End as Ordem 
from 
    vwProducaoGeralTempoLogadoSemAtividade t1 With(NoLock) 
Where 
    Not Exists (Select 0 
       from vwProducaoGeralTempoLogadoSemAtividade t2 With(NoLock) 
       Where T1.CodUsuario = t2.CodUsuario  
       Group by CodUsuario 
       Having Sum(tempo) <> MAx(tempoLogado)) 
Group By 
    DescFornecedor, DescUsuario, Classificacao 

當我們使用它,它會返回在30〜1分鐘的結果。

現在,我已經做了一些調整:

Select DescFornecedor,DescUsuario,Classificacao,Sum(t1.Tempo) as Tempo, 
    Case Classificacao 
When 'Agendamento' Then 2 
When 'Aguardando cadastro' Then 3 
When 'Descarte' Then 8 
When 'Desistência' Then 7 
When 'Em Pausa' Then 4 
When 'Em Volta' Then 10 
When 'Entrevista' Then 1 
When 'Filtro' Then 5 
When 'Outros' Then 9 
When 'Recusa' Then 6 
When 'Sem Atividade' Then 11 
    End as Ordem 
    from vwProducaoGeralTempoLogadoSemAtividade t1 With(NoLock) 
    inner join ( 

select CodUsuario, SUM(tempo) as Tempo, MAX(tempologado) as TempoLogado 
from vwProducaoGeralTempoLogadoSemAtividade with(nolock)  
group by CodUsuario 

) t2 
    on t1.CodUsuario = t2.CodUsuario and 
    t2.Tempo = t2.TempoLogado  
    Group By DescFornecedor,DescUsuario,Classificacao 

但是我社STIL慢!持續10〜20秒。

我該如何改進此查詢? 我出來的想法。

不知道如何處理時間比較。

非常感謝。

(指標和統計都OK,甚至沒有一絲可以幫我嗎)

+0

您正在使用的SQL Server的版本? – 2014-12-03 17:19:31

+0

表中的行數是多少,並且您是否擁有CodUsuario的索引?我也猜測命名爲vwProducaoGeralTempoLogadoSemAtividade是一個視圖。它是基於單個表還是您有一些連接? – CrimsonKing 2014-12-03 17:48:21

+0

在視圖「vwProducaoGeralTempoLogadoSemAtividade」我有3,583行(4secs顯示結果)。 「CodUsuario」不是數據庫表中的一列,我們將它與視圖一起使用。我可以在視圖的列上添加索引嗎?這是「索引視圖」嗎? 「vwPercentualProducao」只返回11行。 我正在使用SQL 2008 r2 – 2014-12-03 17:54:15

回答

0

如果有第二個查詢沒有錯字,我有這部分的問題:

...on ... and t2.Tempo = t2.TempoLogado 

第二標準是基於只有T2,所以可以從連接標準被刪除,T2內進行處理,通過添加:

...having SUM(tempo) = MAX(tempologado) 

我不知道,如果它使多大的改善,雖然。

更新:由於CodUsuario是視圖中的計算列,因此解決方案是將視圖更改爲索引視圖,然後創建索引。

create index CodUsuario on vwProducaoGeralTempoLogadoSemAtividade(CodUsuario) 
+0

我認爲這會對我有幫助。我收到此錯誤: 無法在視圖'vwProducaoGeralTempoLogadoSemAtividade'上創建索引,因爲該視圖不是模式綁定的。 它說我需要用WITH SCHEMABINDING創建視圖。 我會與編碼員談一談,看看他是否可以幫助我: – 2014-12-03 18:10:47

0

嘗試cross apply

cross apply ( 

select CodUsuario, SUM(tempo) as Tempo, MAX(tempologado) as TempoLogado 
from vwProducaoGeralTempoLogadoSemAtividade with(nolock)  
group by CodUsuario 

) t2 
    where t1.CodUsuario = t2.CodUsuario and 
    t2.Tempo = t2.TempoLogado  
    Group By DescFornecedor,DescUsuario,Classificacao 
+0

非常感謝。我在表格的視圖上創建了一個索引,它工作。 – 2014-12-04 11:11:45