加入收藏 | 设为首页 | 会员中心 | 我要投稿 武陵站长网 (https://www.50888.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

具有Max子查询的SQL Server 2000索引视图

发布时间:2022-12-14 14:33:47 所属栏目:MsSql教程 来源:互联网
导读: 具有Max子查询的SQL Server 2000索引视图
sqlsql-server
具有Max子查询的SQL Server 2000索引视图,sql,sql-server,sql-server-2000,Sql,Sql Server,Sql Server 2000,我有一个很大的contrac

具有Max子查询的SQL Server 2000索引视图

sqlsql-server

具有Max子查询的SQL Server 2000索引视图,sql,sql-server,sql-server-2000,Sql,Sql Server,Sql Server 2000,我有一个很大的contracts表,我们有许多存储过程,用于查询状态为Open的contracts。只有不到10%的合同是开放的,随着DB的增长,这个数字正在缩小。我想我可以创建一个开放合同的索引视图,以加速我们的一些查询。问题是状态不在合同表上,我需要一个子查询来检索我想要的数据。(SQL Server然后对我所查看的查询中的整个表进行聚集索引扫描)这是视图的压缩版本(我从合同表中删除了其他30列)如果我尝试在视图上创建一个索引(unique clustered onconstractd)

我有一个很大的contracts表,我们有许多存储过程,用于查询状态为Open的contracts。只有不到10%的合同是开放的,随着DB的增长,这个数字正在缩小。我想我可以创建一个开放合同的索引视图,以加速我们的一些查询。问题是状态不在合同表上,我需要一个子查询来检索我想要的数据。(SQL Server然后对我所查看的查询中的整个表进行聚集索引扫描)

这是视图的压缩版本(我从合同表中删除了其他30列)

如果我尝试在视图上创建一个索引(unique clustered on

constractd

),我会得到以下结果

索引的创建失败

它包含一个或多个不允许的构造。(Microsoft SQL Server,错误1936)

据我所知,问题出在子查询中的最大值

除了将状态放在合同表上(我个人认为它属于该表),还有什么建议可以优化这种情况。否则,其他版本的SQL Server是否允许此索引视图?

视图定义的语法有几个限制。视图定义不得包含以下内容:

计数(*)

行集函数

派生表

自连接

明显的

标准偏差,方差,平均值

浮点*、文本、ntext、图像列

子查询

全文谓词(包含、自由文本)

可为空表达式上的和

最小值,最大值

Mssq视图_db2 视图 物化视图_ios 子视图超出父视图

外接

联合

您使用的是

MAX

,以及子查询,这两项都是不允许的

要获得关于如何解决这一问题的建议,您需要共享一些数据和您正在尝试做的事情。

视图定义的语法有几个限制。视图定义不得包含以下内容:

计数(*)

行集函数

派生表

自连接

明显的

标准偏差,方差,平均值

浮点*、文本、ntext、图像列

子查询

全文谓词(包含、自由文本)

可为空表达式上的和

最小值,最大值

外接

联合

您使用的是

MAX

,以及子查询,这两项都是不允许的

若要获得有关如何解决此问题的建议,您需要共享一些数据以及您正在尝试执行的操作。

这不是“视图”解决方案,需要完成更多工作,但您可以创建非规范化的表,该表将保存视图的结果。这样,所有未结合同的读取都会与该表相反。这将是最快的Mssq视图,但需要维护新表

这不是一个“视图”解决方案,需要做更多的工作才能完成,但您可以创建一个非规范化的表来保存视图的结果。这样,所有未结合同的读取都会与该表相反。这将是最快的,但需要维护新表

创建索引视图是一项非常困难的任务,因为它有很多重循环,其中一个与自连接相关。您在这里有自连接。没有其他视图等

这类主表的另一件事是,如果您只使用一个状态,如“打开”,那么我建议您不要加入表(带有状态代码的主表),而只声明statusid变量,然后将status OPEN的值存储在那里,然后在最终查询中使用该值。这将避免与主表的额外联接

我建议您在最终语句中加入合同表之前,将开放状态的数据存储在临时表中。您可以在statusid、customerid和contractcreationdate上建立索引。然后强制此索引将压缩数据放入临时表中,如

 select contractid into #temp from NMPT_ContractStatus 
where statusid =@statusid group by contractid          
having     datefield = max(datefield)

现在将这个临时表与合同表连接起来

但是,在创建任何类型的索引之前,请确保这些索引的开销远远小于您所获得的好处。

创建索引视图是一项非常困难的任务,因为它有许多重新循环,其中一个与自连接相关。您在这里有自连接。没有其他视图等

这类主表的另一件事是,如果您只使用一个状态,如“打开”,那么我建议您不要加入表(带有状态代码的主表),而只声明statusid变量,然后将status OPEN的值存储在那里,然后在最终查询中使用该值。这将避免与主表的额外联接

我建议您在最终语句中加入合同表之前,将开放状态的数据存储在临时表中。您可以在statusid、customerid和contractcreationdate上建立索引。然后强制此索引将压缩数据放入临时表中,如

 select contractid into #temp from NMPT_ContractStatus 
where statusid =@statusid group by contractid          
having     datefield = max(datefield)

现在将这个临时表与合同表连接起来

但是,在创建任何类型的索引之前,请确保这些索引的开销远远小于您所获得的好处。

如果合同上有statusID,我会对其进行索引,并将其处理完毕。事实上,我们在许多存储过程中都有相同的子查询,数据库被迫不断地确定合同上的当前状态。大多数情况下,我们都在寻找当前状态为OPN的合同。有没有办法对此进行优化?另外还有一种方法用于确认视图的问题如果合同上有statusID,我会为其编制索引并处理它。事实上,我们在许多存储过程中都有相同的子查询,数据库被迫不断地确定合同上的当前状态。大多数情况下,我们都在寻找当前状态为OPN的合同。有没有一种方法可以优化这一点?还有一种方法可以确认专业

(编辑:武陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!