Aracılığıyla paylaş


Dizinli görünümleri tanımlı yaparken bölüm değiştirme

Veri bölümleme yönetmenizi ve koruyarak veri alt kümelerine hızlı ve etkili erişim sağlar bütünlük tüm veri koleksiyon.Dizin oluşturulmuş görünümler bölümlenmiş veri tanımlama daha da sorgularınızı etkinliğini ve hızını artırabilirsiniz.Bu tanımlı görünümler adlı bölüm hizalı dizin oluşturulmuş görünümler.

Aşağıdaki koşullar doğruysa, başvuran tablo ile bölüm hizalı dizinli görünüm:

  • Dizinleri dizinli görünüm ve tablo bölüm işlevleri:

    • Aynı bölümleri tanımlayın.

    • Bölümler için aynı sınır değerleri tanımlayın.

    • Bölüm işlevleri bağımsız değişkenler aynı sütun olması gerekir.

  • Görünüm tanımını projeksiyon listesini içeren bölümleme sütunu (aksine bir ifade , bölümleme sütunu içerir) bölümlenmiş tablo.

  • Görünüm tanımını bir gruplandırma yapar nerede bölümleme sütunu görünüm tanımına dahil gruplandırma sütunlar biridir.

  • (Birleşimler, alt sorgular, işlevleri ve benzeri kullanarak) birden çok tablo görünüm başvuru olduğunda, dizinli görünüm bölüm bölümlenmiş tablolar yalnızca biri ile hizalanır.

De SQL Server 2008, dizin oluşturulmuş görünümler bölümü hizalı geçti karşı tanımlı görünümler bölümlenmiş tabloları ile birlikte.Bölüm veya veri alt kümelerine üzerinde bakım işlemlerini şimdi gerçekleştirilmesini daha verimli bir şekilde bu işlemleri yalnızca, yerine tüm gerekli verileri hedef olduğundan tablo.Dizin oluşturulmuş görünümler veri bölümleme için ek yararları şunlardır:

  • Automatic maintenance.SQL Server 2008 automatically maintains indexed views when INSERT, UPDATE, or DELETE statements are run.

  • Toplama geliştirme.dizinli görünüm toplama yoluyla yeterli satır azaltma sağlıyorsa, toplam sorgu performansı önemli ölçüde artırılabilir.De SQL Server 2008 kuruluş, ne zaman sorgu iyileştiricisi otomatik olarak uygun dizin oluşturulmuş görünüm toplu sorgusu veya sorguyu doğrudan başvuran için dizinlenmiş görünümün bir noexpand kullanarak eşleşme ipucu, sorgu performansı daha ne zaman sorgu tüm tablo. erişir daha verimli olabilir

alter table kullanarak kısıtlamaları...Dizin oluşturulmuş görünümler ile SWITCH deyimi

Kullanırken Transact-SQL alter table...SWITCH deyim dizinli görünüm, tablo ve dizinleri tarafından başvurulan kaynak ve hedef tabloları arasında veri alt kümelerine aktarımı için listelenen koşullara uymalıdır Bölüm Geçişi kullanarak verimli veri aktarma.Bu konu, tablo ve dizin gereksinimleri bölümüne bakın.

Bölüm "Ek gereksinimleri için taşıma bölümler" bölümleri dizin tanımlı görünümleri ile taşıma hakkında daha fazla bilgi için bkz: of Bölüm Geçişi kullanarak verimli veri aktarma.

Bölüm hizalı dizin oluşturulmuş görünümler kullanılabilecek bir kullanılan bir büyük veri ambarı ile senaryodur.Büyük veri ambarı ambarındaki, büyük bir gerçeği tablo tarih, genellikle bölümlenmiş toplu sorguları genellikle gerçeği karşı çalıştırmak ve tablo ile birkaç boyut katılma tablos.Bir bölüm veya alter table … kullanarak değiştirme SWITCH deyim aşağıdaki yararları sağlayabilir:

  • Eskiyen verilerinin gerçeği'nın en eski bölümü hızlı bir şekilde arşivlemek tablo.

  • Hızlı bir şekilde büyük gerçeği en yeni bölüme yeni veri getirme tablo.

Gerçeği en yeni bölüme yeni veri duruma getirildiğinde bölüm hizalı dizinli görünüm nasıl çalıştığını aşağıda gösterilmiştir tablo.Gerçeği geçti yeni bir bölüm tablo birlikte yeni bölüm üzerine oluşturulan toplama taşır.

Bölüme Hizalı Dizin Görünümleri Geçişi

Örnekler

Aşağıdaki örnek nasıl alter tablo … kullanılacağını gösterir SWITCH deyim bir tablonun bir bölümü hizalı dizinli görünüm onunla parçası getirir eski bir bölüm geçmek.

Bu örnekte, satış gerçeği tablo [f_sales] yıl 2006.The satış veri bölümlenmiş bir üç aylık temel. satış verilerinin bir yıl içerirO toplu gerçeği üzerinde tanımlanmış olan toplu sorgusu hızlandırmak için satış tutarını tarih ve saklama ve dizinli görünüm tarafından oluşturulur sorguları sık çalıştırılır tablo.Şimdi, ilk üç aylık dönem 2006 verileri olan bir arşiv tablosuna arşivlenecek while dizinli görünüm doğru ve kullanılabilir tablo gerçeği üzerinde kalır.

USE MASTER
GO

DROP DATABASE test_partition
GO

--Create database with the file groups that will be used by the partition schemes.
CREATE DATABASE test_partition
ON PRIMARY (NAME = 'paiv_Dat0', FILENAME='C:\temp\test_partition_DataFile0.mdf'),
FILEGROUP FG1 (NAME = 'paiv_Dat1', FILENAME = 'C:\temp\test_partition_DataFile1.ndf'),
FILEGROUP FG2 (NAME = 'paiv_Dat2', FILENAME = 'C:\temp\test_partition_DataFile2.ndf'),
FILEGROUP FG3 (NAME = 'paiv_Dat3', FILENAME = 'C:\temp\test_partition_DataFile3.ndf'),
FILEGROUP FG4 (NAME = 'paiv_Dat4', FILENAME = 'C:\temp\test_partition_DataFile4.ndf'),
FILEGROUP FG5 (NAME = 'paiv_Dat5', FILENAME = 'C:\temp\test_partition_DataFile5.ndf')
LOG ON (NAME = 'paiv_log', filename='C:\temp\test_partition_log.ldf')
GO
USE test_partition
GO

-- Create partition function and partition scheme.
CREATE PARTITION FUNCTION [PF1] (int)
AS RANGE LEFT FOR VALUES (20060331, 20060630, 20060930, 20061231);
GO
CREATE PARTITION SCHEME [PS1]
AS PARTITION [PF1] 
TO ([FG1], [FG2], [FG3], [FG4], [FG5]
, [PRIMARY]);
GO

-- Create fact table.
CREATE TABLE dbo.f_sales (date_key INT NOT NULL, cust_key INT, store_key INT, amt MONEY) ON PS1(date_key);
GO

-- Populate data into table f_sales. 
SET NOCOUNT ON
GO
DECLARE @d INT, @ds INT, @cs INT, @s INT
SET @d = 20060101
SET @ds = 7  -- date_key increment step

WHILE (@d <= 20061231) 
BEGIN
WHILE @d%100 > 0 AND @d%100 < 29
BEGIN
SET @cs = 10  -- # of records for customer/store for that date
SET @s = CAST ( RAND() * 1000 as INT )
WHILE (@cs > 0)
BEGIN
INSERT dbo.f_sales (date_key, cust_key, store_key, amt)
VALUES (@d, CAST ( RAND() * 1000 as INT ), @s, CAST ( RAND() * 1000 as MONEY ) )
SET @cs = @cs - 1
END
SET @d = @d + @ds
END
SET @d = @d + @ds
END
GO


-- The table with clustered index is partitioned using the partition scheme specified.
CREATE CLUSTERED INDEX UCIdx_f_sales on dbo.f_sales (date_key, cust_key, store_key) ON PS1(date_key)
GO

--Create indexed view, which aggregates on the date and store.
CREATE VIEW dbo.v_f_sales_sumamt WITH SCHEMABINDING AS
(
SELECT date_key, store_key, sum(ISNULL(amt,0)) AS amt, count_big(*) AS cnt
FROM dbo.f_sales AS sales
GROUP BY date_key, store_key
)
GO

-- Materialize the view. The indexed view is now partition-aligned with table f_sales.
CREATE UNIQUE CLUSTERED INDEX ucidx_v_sales_sum
ON dbo.v_f_sales_sumamt (date_key) ON PS1(date_key)
GO

-- Check data distribution in various partitions of the table & the indexed view.
SELECT OBJECT_NAME(p.object_id) as obj_name, p.index_id, p.partition_number, p.rows, a.type, a.filegroup_id 
FROM sys.system_internals_allocation_units a
JOIN sys.partitions p
ON p.partition_id = a.container_id
WHERE p.object_id IN (OBJECT_ID(N'dbo.f_sales'), OBJECT_ID(N'dbo.v_f_sales_sumamt '))
ORDER BY obj_name, p.index_id, p.partition_number

-- Create archive table to receive the partition that will be switched out of table f_sales. 
CREATE TABLE dbo.sales_archive (date_key INT NOT NULL, cust_key INT, store_key INT, amt MONEY) ON FG1
GO
CREATE CLUSTERED INDEX UCIdx_sales_archive on dbo.sales_archive (date_key, cust_key, store_key) ON FG1
GO
--Create indexed view with view definition matching v_f_sales_sumamt on table f_sales.
CREATE VIEW dbo.v_sales_archive_sumamt WITH SCHEMABINDING AS
(
SELECT date_key, store_key, sum(ISNULL(amt,0)) AS amt, count_big(*) AS cnt
FROM dbo.sales_archive AS sales
GROUP BY date_key, store_key
)
GO

-- Materialize the view. The indexed view is partition-aligned with table sales_archive.
CREATE UNIQUE CLUSTERED INDEX ucidx_v_sales_sum
ON dbo.v_sales_archive_sumamt(date_key) ON FG1
GO

-- Check data distribution in various partitions of the table and the indexed view. 
SELECT OBJECT_NAME(p.object_id) as obj_name, p.index_id, p.partition_number, p.rows, a.type, a.filegroup_id 
FROM sys.system_internals_allocation_units a
JOIN sys.partitions p
ON p.partition_id = a.container_id
WHERE p.object_id IN (OBJECT_ID(N'dbo.sales_archive'), OBJECT_ID(N'dbo.v_sales_archive_sumamt '))
ORDER BY obj_name, p.index_id, p.partition_number

-- Data associated with the old partition of the source table - [f_sales] and the indexed view [v_f_sales_sumamt] - 
-- is switched out to archive table [sales_archive] and the indexed view [v_sales_archive_sumamt].
ALTER TABLE dbo.f_sales SWITCH PARTITION 1 TO dbo.sales_archive

-- Data distribution in various partitions shows that 
-- partition 1 of [f_sales] and the indexed view [v_f_sales_sumamt] are now empty 
-- and these rows are now in [sales_archive] and [v_sales_archive_sumamt], respectively.
SELECT OBJECT_NAME(p.object_id) as obj_name, p.index_id, p.partition_number, p.rows, a.type, a.filegroup_id 
FROM sys.system_internals_allocation_units a
JOIN sys.partitions p
ON p.partition_id = a.container_id
WHERE p.object_id IN (OBJECT_ID(N'dbo.sales_archive'), OBJECT_ID(N'dbo.v_sales_archive_sumamt '), 
OBJECT_ID(N'dbo.f_sales'), OBJECT_ID(N'dbo.v_f_sales_sumamt '))
ORDER BY obj_name, p.index_id, p.partition_number

Bölümü tasarımına geçtikten sonra önceki örnekte gösterildiği gibi tüm verileri tablonun 1 bölüm [f_sales] ve dizinli görünüm [v_f_sales_sumamt] için karşılık gelen tablo taşınan [sales_archive] ve dizinli görünüm [v_sales_archive_sumamt].

Satış tutarı için Temmuz 2006 tarihine göre mağaza tarafından almak için karşı ya da sorgulayabilirsiniz tablo [f_sales] veya dizinli görünüm [v_f_sales_sumamt], aşağıdaki iki sorgu.'de gösterildiği gibisonuçlar iki durumda aynıdır, ancak dizinlenmiş görünümün önceden hesaplanmış toplamları gerçeğe ve 10, faktörüyle satır sayısını azaltır çünkü dizinli görünüm karşı önemli ölçüde çalışan sorgu performansı aşağıdaki örnekte gösterildiği gibi artırır.

-- This query runs against the table [f_sales]
SELECT date_key, store_key AS [Store Number], sum(ISNULL(amt,0)) AS Sales_Amount
FROM dbo.f_sales
WHERE date_key >= '20060701' AND date_key < '20060801'
GROUP BY date_key, store_key
ORDER BY date_key, store_key
OPTION (EXPAND VIEWS)

-- This query runs against the indexed view [v_f_sales_sumamt]
-- the result of this query is the same as the one against the table
-- the indexed view materializes the pre-calculated aggregate, resulting in significant improvements in query performance   
SELECT date_key, store_key AS [Store Number], sum(ISNULL(amt,0)) AS Sales_Amount
FROM dbo.v_f_sales_sumamt WITH (NOEXPAND)
WHERE date_key >= '20060701' AND date_key < '20060801'
GROUP BY date_key, store_key

Bölüm alter table… kullanarak değiştirmeSWITCH deyim hızlı, yalnızca meta veriler bir işlemdir.Dizin oluşturulmuş görünümler bölümünde kaynak ve hedef tablo ile hizalanır yaparken bölüm değiştirme hedef tablo ve ilişkili bölümleri hizalı dizin oluşturulmuş görünümler için de bir veri alt küme küme kümesinin kaynak tablosundan getirilecek sağlar.Kaynak tablo (örneğin, tabloları, dizinleri ve dizin oluşturulmuş görünümler) ile ilişkili olan tüm nesneleri bölümün anahtarı dahil edildiğinden veri koleksiyon bütünlük korunur.Dizin oluşturulmuş görünümler bölümlenmiş tablo üzerinde kullanarak tablo başvuru toplu sorguları performansını önemli ölçüde artırabilir.