mssql 视图能不能创建索引,带子查询的视图能不能创建索引,如何创建?

消息10127,级别16,状态1,第2行无法对视图"OES1.dbo.VW_BKREPORT"创建索引,因为其中包含一个或多个子查询。请考虑将视图更改为仅使用联接而不使用... 消息 10127,级别 16,状态 1,第 2 行
无法对视图 "OES1.dbo.VW_BKREPORT" 创建 索引,因为其中包含一个或多个子查询。请考虑将视图更改为仅使用联接而不使用子查询。另外,请考虑不对视图进行索引。
展开
 我来答
水色浮云
2013-06-13 · TA获得超过604个赞
知道小有建树答主
回答量:222
采纳率:100%
帮助的人:274万
展开全部
消息提示已经给你答案了,你可以考虑用表连接代替子查询。

以下是在视图上建索引的规则,无法改变的:   
定义索引视图的 SELECT 语句不得包含 TOP、DISTINCT、COMPUTE、HAVING 和 UNION 关键字。也不能包含子查询。

SELECT 列表中不得包含星号 (*)、'table.*' 通配符列表、DISTINCT、COUNT(*)、COUNT(<expression>)、基表中的计算列和标量聚合。 

非聚合 SELECT 列表中不能包含表达式。聚合 SELECT 列表(包含 GROUP BY 的查询)中可能包含 SUM 和 COUNT_BIG(<expression>);它一定包含 COUNT_BIG(*)。不允许有其它聚合函数(MIN、MAX、STDEV,...)。

使用 AVG 的复杂聚合无法参与索引视图的 SELECT 列表。不过,如果查询使用这样的聚合,则优化程序将能使用该索引视图,用 SUM 和 COUNT_BIG 的简单聚合组合代替 AVG。

若某列是从取值为 float 数据类型或使用 float 表达式进行取值的表达式得到的,则不能作为索引视图或表中计算列的索引键。这样的列被视为是不精确的。使用 COLUMNPROPERTY 函数决定特定计算列或视图中的列是否精确。

索引视图受限于以下的附加限制: 

索引的创建者必须拥有表。所有表、视图和索引必须在同一数据库中创建。

定义索引视图的 SELECT 语句不得包含视图、行集函数、行内函数或派生表。同一物理表在该语句中只能出现一次。

在任何联接表中,均不允许进行 OUTER JOIN 操作。

搜索条件中不允许使用子查询或者 CONTAINS 或 FREETEXT 谓词。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式