SQL 如何用索引视图(Indexed View)加速聚合查询-SQL

创建索引视图前必须满足:ANSI_NULLS和QUOTED_IDENTIFIER为ON;视图定义不含非确定性函数、子查询、TOP等;聚合必须含COUNT_BIG(*);基表名用两段式。

SQL Server 里创建索引视图前必须满足哪些条件

索引视图不是所有查询都能套用,SQL Server 对它有一套硬性约束,不满足就建不了唯一聚集索引,也就谈不上加速。最常卡住的地方是 SET 选项和视图定义本身。

  • ANSI_NULLS、QUOTED_IDENTIFIER 必须为 ON(连接级和创建时都得开)
  • 视图不能含 GETDATE()、NEWID()、子查询、TOP、UNION、OUTER JOIN、NOT IN 等非确定性或复杂结构
  • 聚合必须包含 COUNT_BIG(*)(哪怕你只想要 COUNT(*)),否则无法建唯一聚集索引
  • 基表名必须用两段式写法(如 dbo.Sales),不能用别名或三段式

如何写一个能被索引的聚合视图

核心是让 SQL Server 能把聚合结果固化成物理存储。关键动作是:先建视图,再加 WITH SCHEMABINDING,最后在视图上建唯一聚集索引。

CREATE VIEW dbo.v_SalesSummary
WITH SCHEMABINDING
AS
SELECT 
    ProductID,
    SUM(Quantity) AS TotalQty,
    COUNT_BIG(*) AS RowCnt  -- 必须有,不可省略
FROM dbo.Sales
GROUP BY ProductID;

接着执行:

CREATE UNIQUE CLUSTERED INDEX IX_v_SalesSummary_ProductID 
ON dbo.v_SalesSummary (ProductID);

注意:ProductID 必须是 GROUP BY 中的列,且整个组合要能唯一标识每行——否则建索引会失败。

为什么查询没走索引视图,反而变慢了

即使视图建好了,SQL Server 默认也不一定用它。常见原因有:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » SQL 如何用索引视图(Indexed View)加速聚合查询-SQL
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3996491+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3996491+
  • 本周更新: 0+
  • 最后更新: 2026-03-16