Tarih saat sütunları sorguları, Access ilişkili en iyi duruma getirme
DATE_CORRELATION_OPTIMIZATION database set seçenek arasında bir eş birleştirmek gerçekleştirmek sorguları performansını artırır iki whose tabloları date veya datetime sütunları ilişkili, ve sorgu yüklemi tarih kısıtlamasını belirtme
Whose tabloları date veya datetime sütun değerleri ilişkili, ve hangi DATE_CORRELATION_OPTIMIZATION etkinleştirmenin yararlı, genellikle bir - çok ilişkisinin parçası kullanılan öncelikle karar destek, raporlama ya da için veri depolama amacıyla.
Örneğin, AdventureWorks2008R2 örnek veritabanı, OrderDate sütun , Purchasing.PurchaseOrderHeader Tablo ve DueDate sütun , Purchasing.PurchaseOrderDetail Tablo ilişkili.Tarih değerleri PurchaseOrderDetail.DueDate eğilimlidir izleyin, sonra kısa bir süre için PurchaseOrderHeader.OrderDate.
DATE_CORRELATION_OPTIMIZATION veritabanı seçeneği olduğunda küme açık, SQL Server veritabanı olan herhangi iki tablo arasındaki korelasyon istatistikleri tutar date veya datetime olan ve sütun bağlı olarak bir tane sütun yabancı anahtar kısıtlaması.Varsayılan olarak, bu seçenek off için küme.
SQL Server Bu korelasyon istatistikleri sorgu yüklemi içinde belirtilen tarih kısıtlaması ile birlikte ek kısıtlamalar sorguyu değiştirmeden eklenebileceğini gerçekleştirip kullanır sonuç küme.Bir sorgu planı seçtiğinde inferred bu koşullar sorgu iyileştiricisi kullanır.Ek kısıtlamalar oluşturmanızı sağladığından daha hızlı bir sorgu planı, neden olabilir SQL Server okumak daha az veri işlerken sorgu.Performans olduğunda her iki tablonun bunların üzerinde tanımlı dizinler kümelenmiş da geliştirildi ve kendi date veya datetime sütunları kendisi için korelasyon istatistikleri korunur ilk veya yalnızca anahtar kümelenmiş dizin.
Hazırlamak, örneğin, varsayalım AdventureWorks2008R2 veritabanı için korelasyon bilgilerini korumak için Purchasing.PurchaseOrderDetail ve Purchasing.PurchaseOrderHeader çalıştırarak, aşağıdaki Transact-SQL komut dosyası:
USE AdventureWorks2008R2;
GO
-- Create a unique index to take the place of the existing
-- primary key constraint
CREATE UNIQUE NONCLUSTERED INDEX
IX_PurchaseOrderDetail_PurchaseOrderID_PurchaseOrderDetailID
ON Purchasing.PurchaseOrderDetail(PurchaseOrderID,PurchaseOrderDetailID);
GO
-- Drop existing clustered index by dropping constraint
ALTER TABLE Purchasing.PurchaseOrderDetail
DROP CONSTRAINT PK_PurchaseOrderDetail_PurchaseOrderID_PurchaseOrderDetailID;
GO
-- Create new clustered index on DueDate
CREATE CLUSTERED INDEX IX_PurchaseOrderDetail_DueDate
ON Purchasing.PurchaseOrderDetail(DueDate);
GO
--Enable DATE_CORRELATION_OPTIMIZATION database option
ALTER DATABASE AdventureWorks2008R2
SET DATE_CORRELATION_OPTIMIZATION ON;
GO
Şimdi, aşağıdaki sorguyu çalıştırmak varsayalım:
SELECT *
FROM Purchasing.PurchaseOrderHeader AS h,
INNER JOIN Purchasing.PurchaseOrderDetail AS d
ON h.PurchaseOrderID = d.PurchaseOrderID
WHERE h.OrderDate BETWEEN '20060101' AND '20060201';
Değerleri PurchaseOrderDetail.DueDate Bu tarafından döndürülen sorgu genellikle Sonbahar gibi değerleri 14 gün gün belirli bir süre içinde PurchaseOrderHeader.OrderDate.Bu yüzden SQL Server önceki sorgudan daha iyi buna benzer bir sorgu kullanarak ifade edilebilir gerçekleştirip mümkün olabilir:
SELECT *
FROM Purchasing.PurchaseOrderHeader AS h,
Purchasing.PurchaseOrderDetail AS d
WHERE h.PurchaseOrderID = d.PurchaseOrderID
AND h.OrderDate BETWEEN '1/1/06' AND '2/1/06'
AND d.DueDate BETWEEN CAST ('20060101' AS datetime) + 14 AND CAST ('20060201' AS datetime) + 14;
Özgün sorgu ve değerleri veritabanınızdaki verileri, ikinci ve yan tümce tümce tümcesinde belirtilen koşul eklendi, tam forma bağlıdır.Örtük bir koşul ekledikten sonra iyileştirici yürütme planı oluşturmak için kullanır.Bu örnekte, vardır bir kümelenmiş dizin üzerinde PurchaseOrderDetail.DueDate Bu dizin, karşılayan satırları almak için kullanılabilecek şekilde d.DueDate BETWEEN CAST ('20060101' AS datetime) + 14 AND CAST ('20060201' AS datetime) + 14.Birkaç yıl tutulacak veri varsa Purchasing.PurchaseOrderDetail, bu sorgu önemli bir yürütme (several-fold) düşüş neden olabilir saat karşılaştırıldığında özgün sorgu.
DATE_CORRELATION_OPTIMIZATION, etkinleştirme nedeniyle olayla bir koşulu ile bir sorgu planı yürütmeden önce SQL Server doğrular, sorgu üretmek doğru yanıt göre geçerli içeriğini veritabanı.
DATE_CORRELATION_OPTIMIZATION veritabanı seçeneğini kullanma gereksinimleri
DATE_CORRELATION_OPTIMIZATION veritabanı seçeneğini etkinleştirme den faydalanmak iki tablo için aşağıdaki koşullar karşılanmalıdır:
Veritabanı seçeneklerini küme aşağıdaki şekilde küme olması gerekir.ANSI_NULLS, ANSI_PADDING ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL ve tırnak içine alınmış TANIMLAYICI on olarak ayarlanmalıdır.NUMERIC_ROUNDABORT off için AYARLANMIŞ olması gerekir.
Bulunması tek -sütun tablolar arasında yabancı anahtar ilişkisi.
Tabloların her ikisi de olması gerekir datetime tanımlanmış olan sütunlar null.
En az bir datetime sütunları kümelenmiş dizin anahtar sütunu olmalıdır (dizin anahtarı bileşik ise, onu olmalıdır ilk anahtar), veya olması gerektiğini bölümleme sütunu, bölümlenmiş bir tablo. ise
Her iki tablonun aynı kullanıcı tarafından sahip olunan gerekir.
Aşağıdakileri dikkate alın, size küme DATE_CORRELATION_OPTIMIZATION veritabanı seçeneği on:
SQL Server korelasyon bilgileri formunda istatistik tutar.Bu istatistikler tarafından güncelleştirilir SQL Server sırasında ekleme, güncelleştirme ve silme işlemleri ilgili tablolarda bu operasyon performansını etkileyebilirDATE_CORRELATION_OPTIMIZATION güncelleştirme yoğun veritabanı ortamlarında etkinleştirmemelisiniz.
Herhangi birinin, datetime sütunlar için hangi korelasyon istatistikleri korunur ilk veya yalnızca bir kümelenmiş dizin anahtar değil, göz önünde it. üzerinde kümelenmiş bir dizin oluşturmaGenellikle bunu korelasyon istatistikleri tarafından kapsanan sorgu türleri üzerinde daha iyi performans için liderleri.Kümelenmiş bir dizin birincil anahtar sütunları üzerinde zaten varsa, farklı bir sütun kümeleri kümelenmiş dizin ve birincil anahtarı kullanın böylece tablo değiştirebilirsiniz.
DATE_CORRELATION_OPTIMIZATION etkinleştirmek aşağıdaki durumlarda herhangi bir yarar sağlamaz:
Hiçbir korelasyon istatistikleri bakımı için yukarıda belirtilen ölçütlere uyan tabloları çiftleri vardır.
Korelasyon istatistikleri koruyarak ölçütlere, ancak, sorgular tabloları çiftleri vardır birleştirmek bu tabloları kendi Doðrulamalarda tarih kısıtlama belirtmeyin.
İçin küme DATE_CORRELATION_OPTIMIZATION veritabanı seçeneği
Korelasyon istatistikleri ile çalışma
Tüm uygun çifti eşleşen tabloların, korelasyon İstatistikleri otomatik olarak dizin oluşturulmuş görünümler biçiminde oluşturulur, size küme DATE_CORRELATION_OPTIMIZATION veritabanı seçeneği açık.Zaman SQL Server sorgu iyileştiricisi çiftleri arasındaki korelasyon yararlanmak mümkün olan datetime sütunlar, kendi sorgu planı içinde Bu korelasyon istatistikleri kullanır.Korelasyon istatistikleri de INSERT, update mantığı, yer ve delete deyimlerini burada etkilenir.Korelasyon istatistikleri adları aşağıdaki formu alın:
MPStats_Sys<constraint_object_id><GUID><FK_constraint_name>
<FK_constraint_name>is the name of the FOREIGN KEY constraint in the sys.objects catalog view on which the datetime match is based.<constraint_object_id> is an 8-digit hexadecimal representation of the objectid of the FOREIGN KEY constraint.
Not
SQL Serverkısaltan FK_constraint_bölümü korelasyon istatistikleri, adı için tanımlayıcı uzunluğu sınırı aşabilir
set showplan xml kullanarak bir sorgu yürütülürken korelasyon istatistikleri türetilen herhangi bir filtre düğüm aşağıdaki öznitelik içerir:
DateCorrelationOptimization="true"
Örneğin, bir <doðrulama> düğüm tarafından korelasyon istatistikleri etkilediği aþaðýdaki gibi görünür:
<Predicate DateCorrelationOptimization="true">
Bu öznitelik tamamen korelasyon istatistikleri veya diğer bir yüklemi ile korelasyon istatistikleri etkilediği bir yüklemi birleştirerek oluşturulan herhangi bir filtre düğüm ile birlikte gelir.
Generally, when the DATE_CORRELATION_OPTIMIZATION database option is set to ON, SQL Server creates correlation statistics for all eligible pairs of datetime columns.SQL Server creates additional correlation statistics when you perform the following:
YABANCI anahtar kısıtlamaları create table veya alter gereksinimlerini karşılayan table aracılığıyla oluşturmak datetime korelasyon en iyi duruma getirme.
kümelenmiş dizin oluşturmak bir datetime sütun ve bu sütunu ile korelasyon eşleştirmek için uygun datetime sütunu başka bir tablo.
Not
Kümelenmiş dizinler çevrimiçi ile oluşturulan herhangi bir korelasyon istatistikleri oluşturulur = seçenek.Ancak, dizin oluşturma işlemi onaylandıktan sonra indeks bağlıdır korelasyon istatistikleri bir yabancı anahtar kısıtlaması oluşturulması gibi başka bir işlemde olay sonucu olarak yerleşik.
Değiştirmek null atanabilirlik veya korelasyon ile eşleştirmek için uygun hale getirmek için bir sütunun veri türünü datetime sütunu başka bir tablo.
Doğrudan uygulamalarında, korelasyon istatistikleri için başvuruda değil SQL Server karar bırakma onları hiçbir saat.Onları korumak için maliyet performansını etkilediğini saptarsanız, ayrı ayrı korelasyon istatistikleri bırakmak karar verebilirsiniz.Korelasyon istatistikleri açılan izinleri varsayılan üyelerine küme sysadmin sabit sunucu rolü db_owner ve db_ddladmin sabit veritabanı rolleri ve tablolar korelasyon istatistikleri tanımlanır çiftinin sahibi.Bu izinler transfer edilebilir.
Aşağıdaki durumlarda korelasyon istatistikleri bırakılır:
Zaman, küme DATE_CORRELATION_OPTIMIZATION veritabanı seçeneği off, tarafından oluşturulan herhangi bir korelasyon istatistikleri SQL Server bırakılan.
Korumak için aşırı depolama gerektiren veya, yararlı olması beklenmez korelasyon istatistikleri bırakılır.
drop table veya alter table kullanarak bir yabancı anahtar kısıtlaması düşürdüğünüzde, bu sınırlama ile ilişkili tüm korelasyon istatistikleri bırakılır.
Artık aynı kullanıcı tarafından sahip olunan için bağıntı eşleşen bir işlem katılıyor tablolar neden olduğunda, ilgili korelasyon istatistikleri bırakılır.
Zaman, yürütmek bir alter table…SWITCH deyim ve kaynak tablo veya hedef tablo için tanımlanmış korelasyon istatistikleri vardır, bu korelasyon istatistikleri bırakılır.
When you create a clustered index on a datetime column and correlation statistics are built on a different datetime column of the same table, the correlation statistics are dropped.SQL Server may create new correlation statistics based on the newly created clustered index, if eligible.
Önde gelen, dizin anahtar olan bir kümelenmiş dizin bırakın ne zaman bir datetime , sütun, fırsatla ilişkili korelasyon istatistikleri bırakılır, başka bir datetime sütun varsa aynı tablo üzerinde hangi yeni korelasyon istatistikleri oluşturulabilir.
Veri türünü değiştirmek için alter table çalıştırdığınızda veya null atanabilirlik korelasyon istatistikleri katılan bir sütunu, bu istatistikleri bırakılır.
Korelasyon istatistikleri oluşturulur veya bırakılan oluşturulan ya da bırakılan neden aynı hareketin bir parçası olarak.Bu işlem, çevrimiçi ne zaman uyumsuz.
Basit Veritabanı Altyapısı Ayarlama Danışmanı'ı kullandığınızda, bir sunucu-tabanlı üretim sunucusuna doğrudan ayarlamak için senaryo tuning, maliyetleri ve korelasyon istatistikleri yararları düşünür.Ancak, test üretim sunucusu senaryosunda Veritabanı Altyapısı Ayarlama Danışmanı'ı kullandığınızda, bu korelasyon istatistikleri iç sistem nesnelerinin olarak saymaz.Bu nedenle, korelasyon istatistikleri sorgu en iyi duruma getirme Veritabanı Altyapısı Ayarlama Danışmanı'tarafından endeksini Analiz ayarlama sırasında kullanılmaz.Test üretim senaryosunda, Veritabanı Altyapısı Ayarlama Danışmanı korelasyon istatistikleri, basılı dizin oluşturulmuş görünümler hakkında yaptığı öneriler kendi maliyetlerini ancak kendi yararları bildiğinden yoksaymak isteyebilirsiniz.Her iki senaryoda da Veritabanı Altyapısı Ayarlama Danışmanı kümelenmiş dizinler gibi belirli dizinleri seçimi üzerinde önerebilir değil datetime DATE_CORRELATION_OPTIMIZATION etkinleştirildiğinde, yararlı olabilir sütun.
Korelasyon istatistikleri hakkında meta veri sorgulama
To view the setting of the DATE_CORRELATION_OPTIMIZATION database option, select the is_date_correlation_on column of the sys.databasescatalog view.
Korelasyon istatistikleri bir görünüme dayalı olup olmadığını belirlemek için seçin is_date_correlation_view sütun , sys.views Katalog görünümü.
Ayrıca bkz.