Man*_*ani 5 sql sql-server indexing indexed-view
我有一个查询,在许多表上执行连接,导致性能不佳.
为了提高性能,我创建了一个索引视图,我看到使用日期过滤器查看查询的性能有了显着改善.但是,我关心的是索引的存储.根据我的阅读,唯一的聚簇索引存储在SQL Server上.这是否意味着它将整个数据作为连接的一部分单独存储在视图中?如果是这样,如果我在视图中包含了作为连接一部分的表中的所有列,那么服务器上的磁盘空间是否会大约是没有索引视图的磁盘空间的两倍?每次我将数据输入基础表时,索引视图的数据都会重复?
那是正确的.索引视图基本上是一个附加表,它以排序方式包含所有数据的副本.这就是它如此之快的原因,但随着SQL Server中的所有内容的落地,它需要付出代价 - 在这种情况下需要额外的存储空间以及保持数据的所有副本同步所需的额外时间.
对于表上的普通索引也是如此.它也是索引键的副本(以及在哪里可以找到原始行的一些信息),需要额外的存储空间和维护更新期间的额外时间.
要确定在表或视图上添加索引是否有意义,需要查看整个系统,并查看一个查询的性能改进是否值得其他查询的性能下降.
在您的情况下,您还应该(首先)检查基础表上的其他索引是否可以帮助您进行查询.