0

我写了这个查询“立方体”了一些写入部分总计的数据:

select  upper(coalesce(left(k.SubStabilimento,12),'ALL')) as Stabilimento, 
        sum(k.PotenzialmenteInappropriato) as Numeratore, 
        count(k.ProgrSdo)-sum(k.PotenzialmenteInappropriato) as Denominatore, 

 case when (count(k.ProgrSdo)-sum(k.PotenzialmenteInappropriato)) > 0 then 1.0*sum(k.PotenzialmenteInappropriato) / (count(k.ProgrSdo)-sum(k.PotenzialmenteInappropriato)) else   0  end as Rapporto,
        upper(coalesce(DescrDisciplina,'ALL')) AS Disciplina,
                    case when K.TipologiaDRG = 'C' then 'CHIR.'
                         when K.TipologiaDRG = 'M' then 'MED.'
                         when K.TipologiaDRG is null then 'ALL'
                         when K.TipologiaDRG = ''  then 'SENZA TIPO'
                    end  as TipoDRG,
        case when [Anno]=@anno then 'ATTUALE'
             when [Anno]=@anno-1 then 'PRECEDENTE' 
             else cast([Anno] as varchar(4))
             end as Periodo,
        upper(coalesce(left(k.mese,2),  'ALL')) as Mese,
        upper(coalesce(NomeMese,'ALL')) as MeseDescr

from   
        tabella k
where k.Mese <= @mese

   and k.anno between @anno-1 and @anno
   and k.RegimeRicovero = 1
   and codicepresidio=080808
   and TipologiaFlusso like 'Pro%'
group by SubStabilimento, DescrDisciplina, TipologiaDRG, anno, mese,nomemese with cube
having grouping(anno) = 0
AND GROUPING(nomeMese) = GROUPING(mese)

这个 groovy 代码是根据必须传递给查询的参数值在运行时添加的:

if ( parameters.get('par_stabilimenti').toUpperCase() != "'TUTTO'" )

{  query = query +  "and upper(coalesce(left(k.SubStabilimento,12),'AUSL_TOTALE')) in ("+  parameters.get('par_stabilimenti').toUpperCase() +" )";}
if ( parameters.get('par_discipline').toUpperCase() != "'TUTTO'" )

{   query = query +  "and upper(coalesce(k.DescrDisciplina,'TOT. STABILIMENTO')) in ("+  parameters.get('par_discipline').toUpperCase() +" )";}

SQL 参数由应用程序运行时传递

我(手动)对单个列和表主键进行了所有索引,我还添加了 sql server 查询调谐器建议的索引。

现在执行仍然需要很长时间(大约 4 英寸),现在我需要让它运行速度快 8 倍。

我可以对查询进行一些优化吗?(参数由应用程序传递)

有没有一种方法可以预先计算执行计划,这样 sql server 就不必每次启动查询都重新执行?

我真的不知道如何提高我已经做过的表现。

我在 SQL Server 2018 pro 上(所以没有列存储索引)

在这里您可以找到执行计划。

4

0 回答 0