Dağıtılmış bölümlenmiş görünümler çözme

The SQL Server query processor optimizes the performance of distributed partitioned views.En önemli yanlarından biri dağıtılmış bölümlü görünüm performans üye sunucular arasında aktarılan veri miktarını en aza.

SQL ServerUzak üye tablolardan veri erişim için dağıtılmış sorgular etkin biçimde kullanmasına Akıllı, dinamik planları oluşturur:

  • Sorgu işlemci ilk onay kýsýtlama tanýmlarý her üyeden almak için ole db kullanır tablo.Bu anahtar değerleri dağılımı üye tablolar eşleştirmek sorgu işlemci sağlar.

  • Sorgu işlemci bir sql deyim where yan tümce tümce tümce üye tablolardaki satırların nasıl dağıtıldığını gösteren harita için belirtilen anahtar aralıkları karşılaştırır.Sorgu işlemci sonra dağıtılmış sorgular tamamlamak için gerekli olan yalnızca uzaktan satırları almak için kullanılan sorgu yürütme planı oluşturur SQL deyim.Yürütme planı da böyle bir şekilde tüm erişim uzak üye tablolar, veri veya meta veriler, Gecikmeli olduğunu bilgi kadar yerleşik olarak bulunur.

Örneğin, bir müşteriler burada bir sistem düşünün tablo üzerinden bölümlendirilir Sunucu1 (CustomerID 1 ile 3299999), Sunucu2 (CustomerID 3300000 6599999 aracılığıyla gelen), ve SUNUCU3 (CustomerID 6600000 9999999 aracılığıyla gelen).

Yerleşik olarak bulunan yürütülen bu sorgu için yürütme planı dikkate Sunucu1:

SELECT *
FROM CompanyData.dbo.Customers
WHERE CustomerID BETWEEN 3200000 AND 3400000;

Bu sorgu için yürütme planı satırlarla ayıklar CustomerID anahtar değerleri ile 3299999 yerel üye'den 3200000 tablove anahtar değerlere sahip satırlar 3300000 3400000 aracılığıyla almak için bir dağıtılmış sorgu sorunlar Sunucu2.

The SQL Server query processor can also build dynamic logic into query execution plans for SQL statements in which the key values are not known when the plan must be built.Örneğin, bu saklı yordam göz önünde bulundurun:

CREATE PROCEDURE GetCustomer @CustomerIDParameter INT
AS
SELECT *
FROM CompanyData.dbo.Customers
WHERE CustomerID = @CustomerIDParameter;

SQL Serverhangi anahtar değeri tarafından sağlanan önceden tahmin edilemez @ customeridparameter parametresi her saat yordam yürütülür.Anahtar değer öngörülen çünkü sorgu işlemci ayrıca hangi üye tahmin edemezsiniz erişilmek üzere tablo vardır.İşlemek için durum, SQL Server bilinir gibi dinamik filtreler, hangi üye tablo erişildiğinde denetlemek için temel koşullu mantığı vardır yürütme planı oluştururgirdi parametresi değeri. Varsayarak GetCustomer , saklı yordam yürütülen üzerinde Sunucu1, yürütme planı mantığı aşağıdaki gösterildiği gibi gösterilebilir:

IF @CustomerIDParameter BETWEEN 1 and 3299999
   Retrieve row from local table CustomerData.dbo.Customer_33
ELSEIF @CustomerIDParameter BETWEEN 3300000 and 6599999
   Retrieve row from linked table Server2.CustomerData.dbo.Customer_66
ELSEIF @CustomerIDParameter BETWEEN 6600000 and 9999999
   Retrieve row from linked table Server3.CustomerData.dbo.Customer_99

SQL ServerBazen bu tür bile değil parametreleştirilmiş sorguları için dinamik yürütme planları oluşturur.Yürütme planı yeniden kullanılabilir olacak şekilde en iyi duruma getiricisi sorgu stratejisinin.Bölümlenmiş görünümün başvuran bir sorgu en iyi duruma getiricisi parameterizes, iyileştirici artık gerekli satırları belirtilen bir gelir kabul edilebilir temel tablo.Sonra yürütme planında dinamik filtreler kullanmak gerekir.Daha fazla bilgi için bkz: Basit parameterizasyonunu.