sql-server - 聚集索引如何在 View 上实现

标签 sql-server view indexing clustered-index indexed-view

我可以在 View 上创建聚集或非聚集索引,SQL SERVER 说,我们可以有多个非聚集索引(最多 249),但表或 View 上只存在一个聚集索引。因为,记录是按其物理存储位置进行排序的,并且我们不能有多个排序顺序。所以,我的问题是,因为 View 并不物理存储在数据库中。那么,如果我在 View 上创建聚集索引并且基表已经存在聚集索引会怎么样。聚集索引如何在 View 上实现?聚集索引如何工作以及如何在 View 中发挥作用?

最佳答案

View 只是一个存储的查询,没有具体化数据除非它具有聚集索引。

在许多情况下,人们认为任何旧 View 都可以通过添加聚集索引来“加速”。这种情况很少见。通常,您创建索引 View 来预先聚合某些计算,例如 SUM 或 COUNT_BIG。如果您创建一个不聚合的索引 View ,因此具有与基表相同的行/页数,那么您没有实现任何目标(当然,就像任何事情一样,也有异常(exception) - View 上的索引可能是例如,比基表更瘦,从而导致页面更少)。

顺便说一句,除非您首先创建聚集索引,否则您无法在 View 上创建非聚集索引。您还应该记住,就像表上的索引一样,索引 View 也不是免费的。虽然它可能会加快某些查询的速度,但 SQL Server 必须在工作负载的整个 DML 部分中维护索引。

你真的应该阅读documents like this one ,其中更详细地介绍了索引 View 的性能优势,以及 this one ,其中记录了限制和局限性等。

关于sql-server - 聚集索引如何在 View 上实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16094204/

相关文章:

Sql 通知支持的事务隔离级别

c# - MVC Url.Content 与 javascript 局部变量

用于查看性能缓慢的 MySQL 查询

C++ 排序和跟踪索引

postgresql - 如何查找该行是否是索引的一部分?

sql-server - 安装 Visual Studio 2012 后无法连接任何远程数据库服务器

c# - 无法连接到 LINQ to SQL 网页上的 SQL 服务器

sql-server - 如何对事实表建模

php - 如何让drupal View 显示基于节点的动态内容

python-3.x - Dask 中的二维 bool 索引