2016-04-13 17 views
0

Oracleでマテリアライズド・ビューが使用されており、SQL Serverに変換する必要があります。私はインデックス付きのビューのコンセプトで同じものを書く方法がわかりません。 はここMarc_s AS索引ビューへのマテリアライズド・ビュー

CREATE MATERIALIZED VIEW STUD_FUZZY_CERTIFICATIONS_mv 
FOR UPDATE 
AS 
SELECT * 
FROM STUD_FUZZY_CERTIFICATIONS; -- some base table 

答えて

1

here

を述べた私のマテリアライズド・ビューである彼らだと呼ばれるインデックス付きビュー、SQL Serverの - より多くの背景のためにこれらのホワイトペーパー読み:

基本的に、すべてを行う必要がある:

  • は、そのビュー

にクラスタ化インデックスを作成する通常のビューを作成すれば完了です!

難しいのは、ビューがかなり多くの制約と制限を満たさなければならないことです。これらは、ホワイトペーパーに概説されています。あなたがこれを行うなら、それはすべてあります。ビューは自動的に更新され、メンテナンスは必要ありません。

サンプル

USE AdventureWorks2012; 
GO 
--Set the options to support indexed views. 
SET NUMERIC_ROUNDABORT OFF; 
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, 
    QUOTED_IDENTIFIER, ANSI_NULLS ON; 
GO 
--Create view with schemabinding. 
IF OBJECT_ID ('Sales.vOrders', 'view') IS NOT NULL 
DROP VIEW Sales.vOrders ; 
GO 
CREATE VIEW Sales.vOrders 
WITH SCHEMABINDING 
AS 
    SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Revenue, 
     OrderDate, ProductID, COUNT_BIG(*) AS COUNT 
    FROM Sales.SalesOrderDetail AS od, Sales.SalesOrderHeader AS o 
    WHERE od.SalesOrderID = o.SalesOrderID 
    GROUP BY OrderDate, ProductID; 
GO 
--Create an index on the view. 
CREATE UNIQUE CLUSTERED INDEX IDX_V1 
    ON Sales.vOrders (OrderDate, ProductID); 
GO 
--This query can use the indexed view even though the view is 
--not specified in the FROM clause. 
SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rev, 
    OrderDate, ProductID 
FROM Sales.SalesOrderDetail AS od 
    JOIN Sales.SalesOrderHeader AS o ON od.SalesOrderID=o.SalesOrderID 
     AND ProductID BETWEEN 700 and 800 
     AND OrderDate >= CONVERT(datetime,'05/01/2002',101) 
GROUP BY OrderDate, ProductID 
ORDER BY Rev DESC; 
GO 
--This query can use the above indexed view. 
SELECT OrderDate, SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rev 
FROM Sales.SalesOrderDetail AS od 
    JOIN Sales.SalesOrderHeader AS o ON od.SalesOrderID=o.SalesOrderID 
     AND DATEPART(mm,OrderDate)= 3 
     AND DATEPART(yy,OrderDate) = 2002 
GROUP BY OrderDate 
ORDER BY OrderDate ASC; 
GO 
関連する問題