0

我想创建一个带有冗长查询的视图,例如:

CREATE VIEW doubleV
AS 
SELECT * FROM X1 as R
WHERE [Ext] IN 
(
    SELECT [Ext] FROM X1 as RR
    WHERE RR.cliID=R.cliID 
    AND Soc='j'
    GROUP BY [Ext]  
    HAVING COUNT(*) > 1
)

但是当我从这个视图中选择所有元素时,Sql server 只是在视图内执行查询,这需要很多时间。

是否可以在VIEW CREATION执行查询?

有什么可以让我制作一个带有查询结果的临时表吗?

4

2 回答 2

0

您可以使用

SELECT … INTO NewTableName
FROM …

使用查询结果创建表(该表将缺少任何键,并且可以更新)。

您还可以创建一个“索引视图”:它是视图结果的副本,通常旨在不时更新(例如,每隔几分钟运行一次昂贵的查询以平衡结果的新鲜度和成本得到他们)。这通常称为“物化视图”。

于 2015-07-07T08:22:14.467 回答
0

这里

标准视图的结果集不会永久存储在数据库中。每次查询引用视图时,Microsoft® SQL Server™ 2000 都会将构建视图结果集所需的逻辑动态合并到从基表中的数据构建完整查询结果集所需的逻辑中。构建视图结果的过程称为物化视图。

所以你需要创建一个索引视图,为了做到这一点,你可以阅读这个

您需要的代码如下(可能有一些拼写错误):

CREATE VIEW doubleV
AS 
SELECT * FROM X1 as R
WHERE [Ext] IN 
(
    SELECT [Ext] FROM X1 as RR
    WHERE RR.cliID=R.cliID 
    AND Soc='j'
    GROUP BY [Ext]  
    HAVING COUNT(*) > 1
)
GO
CREATE UNIQUE CLUSTERED INDEX doubleVInd ON doubleV (field_you_want)

其中 field_you_want 是您索引的字段,很可能是一个 ID。

于 2015-07-07T08:27:54.243 回答