改善sql server 2012中的视图性能

时间:2014-06-12 14:47:31

标签: sql-server views pivot transpose

我有一个视图vwBalance,返回超过150.000.000行,下面是代码:

SELECT    *
FROM            dbo.balance INNER JOIN
                         dbo.NomBalance   ON dbo.balance.IdNomBil = dbo.NomBalance.Id

但我想转换值返回,所以我使用像这样的PIVOTE函数:

SELECT  An, cui,caen, col1, col2, ... col 100
FROM   (SELECT     cui, valoare, cod_campbil,caen,An
        FROM vwBilant  WITH (NOLOCK)
        p PIVOT (MAX(valoare) FOR cod_campbil IN ( col1, col2, ... col100   ) AS pvt

问题是:

  1. 我应该在视图vwBalance中使用查询提示吗?这个提示可以改善或者可以锁定转置操作吗?
  2. 如果我使用NOLOCK提示而不是其他查询提示,这是一个问题吗?
  3. 有更好的方法可以改善对多列的转置吗?
  4. 谢谢!

1 个答案:

答案 0 :(得分:1)

我可以提供以下建议:

  1. 如果没有破坏您的业务逻辑,您可以使用提示readpast
  2. 您可以为此视图创建聚簇索引。它实现了您的视图,但是对于此视图中使用的所有表,将减少更改操作的性能。
  3. 另外,您应该检查在join和where子句中使用的字段的索引。
  4. 您可以使用预处理。因此,您可以在某些值中插入此值     另一张桌子(例如在晚上)。在这种情况下,您可以使用     columnstore index或只为此表进行页面压缩     以及您可以对所有表使用页面compression     在这个视图中使用。