2016-04-13 12 views
0

Oracle'da somutlaşmış bir görünümüm var ve bunu SQL sunucusuna dönüştürmem gerekiyor. Endeksli görünüm konseptiyle nasıl yazılacağından emin değilim. İşte Marc_s OLARAKİndeksli görünümlere yapılan görünümler

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

cevap

1

here

belirtti benim hayata görünümdür Onlar konum denilen endeksli görünümleri, SQL Server - daha arka plan için bu beyaz kağıtlar okuyun:

Temelde, yapmanız gereken tek şey:

  • bu görünümde

üzerinde kümelenmiş bir dizin oluşturmak düzenli bir görünüm oluşturmak ve bu kadar!

Zor olan kısım şudur: görünüm, çok sayıda kısıtlama ve sınırlamayı yerine getirmelidir - bunlar, beyaz kağıtta özetlenmiştir. Bunu yaparsanız - hepsi budur. Görünüm otomatik olarak güncelleniyor, bakım gerektirmiyor.

Numune

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 
İlgili konular