无法在视图上创建索引,因为视图不是模式绑定的

时间:2017-01-10 20:49:49

标签: sql-server-2008 tsql sql-server-2012

我已经做了一个概括的视图,我需要它与另一个视图交叉,两个视图都需要被2个字段索引(第一个字段是日期),以便我可以提高响应时间的性能。 当我尝试这样做时,我收到以下消息:

-- CREATING VIEW FOR VENTAS POR DISTRIBUIDOR, DEPARTAMENTO
create view [dbo].[vw_ventas_dist_dep] as 
SELECT CAST(t.fecha AS DATE)fecha
,d.NombreDistribuidor distribuidor
,u.Nombre departamento
,sum(tr.monto) monto
 from HechosTransferencia tr inner join DimensionTiempo t on tr.DimensionTiempoId=t.DimensionTiempoId
inner join DimensionDistribuidor d on d.DimensionDistribuidorId=tr.DimensionDistribuidorId
  inner join DimUbigeo u on u.DimDepartamentoId=tr.DimDepartamentoId and u.DimProvinciaId='' and u.DimDistritoId=''
WHERE        (t.Fecha BETWEEN DATEADD(MONTH, DATEDIFF(MONTH, - 3, GETDATE()) - 3, 0) AND GETDATE())
 -- and t.fecha between  '2016-12-19' and '2016-12-20'  and d.NombreDistribuidor='auren S.A.'
 and tr.TipoDestino='PDV' and tr.TipoOperacion='Transferencia'
group by CAST(t.fecha AS DATE),d.NombreDistribuidor,u.Nombre ;
GO

CREATE UNIQUE CLUSTERED INDEX PK_fecha ON vw_ventas
(
    fecha,  -- date field
    distribuidor -- string field
);

Msg 1939, Level 16, State 1, Line 1
Cannot create index on view 'vw_ventas' because the view is not schema bound.

我尝试过放置WITH SCHEMABINDING但是没有办法制作索引视图。

1 个答案:

答案 0 :(得分:0)

您需要在视图定义中使用WITH SCHEMABINDING

ALTER VIEW vw_ventas WITH SCHEMABINDING
AS
SELECT ...
FROM ...
WHERE ... ;

在此处查看CREATE VIEW的文档。但是,根据您在视图中执行的操作,索引将意味着您的性能有所改善。

大多数情况下,索引基表会带来更好的改进,而表上的附加索引也可能有助于其他查询。