Aracılığıyla paylaş


forceseek tablo ipucu kullanma

Tablo veya sorguda başvurulan görünümünde veri erişim yol olarak işlem yalnızca bir dizini kullanmak için sorgu iyileştiricisi arama forceseek tablo ipucu zorlar.Bu tablo ipucu tarafından seçilen varsayılan plan geçersiz kılmak için kullanabilirsiniz sorgu iyileştiricisi tarafından bir verimsiz sorgu planı neden olduğu performans sorunlarını önlemek için.Örneğin, tablo ya da dizin tarama işleci bir planı içerir ve okuma çok sayıda sorgu yürütülürken gözlemdeki gibi ilgili tablolara neden İSTATİSTİKLERİ GÇ çıktı, zorlama bir dizin arama işlemi sorgu performansı daha iyi verim.Bu özellikle doğru yanlış, kardinalite, veya maliyet tahmini lehine hareket planı derleme sırasında tarama işlemleri en iyi duruma getiricisi neden saat.

Arama işlemleri kümelenmemiş dizin ve forceseek her ikisi de kümelenmiş uygulanır.Tablo veya Görünüm FROM ve select deyiminin from yan tümce tümce tümcesinde belirtilebilir <table_source> yan tümce tümce tümcesinde bir update veya delete deyim.

Dikkat notuDikkat

Çünkü SQL Server sorgu iyileştiricisi genellikle seçer en iyi yürütme planı için bir sorgu, yalnızca son çare olarak deneyimli geliştiriciler olarak ipuçları kullanmanız önerilir ve veritabanı yöneticileri.

Sorgu değerlendirme forceseek uygulanabilirliği için planları

forceseek tablo ipucu yararlı olabilir bir tablo ya da görünüm üzerinde bir tablo veya dizin tarama işleç sorgu planını kullanır, ancak dizin arama operatörü daha verimli olabilir.Aşağıdaki sorgu ve sonraki yürütme planı dikkate alın.

USE AdventureWorks2008R2;
GO
SELECT *
FROM Sales.SalesOrderHeader AS h
INNER JOIN Sales.SalesOrderDetail AS d 
    ON h.SalesOrderID = d.SalesOrderID 
WHERE h.TotalDue > 100
AND (d.OrderQty > 5 OR d.LineTotal < 1000.00);
GO

Aşağıdaki yürütme planı gösteren sorgu iyileştiricisi her iki tablodaki verilere erişmek için bir kümelenmiş dizin tarama işleç seçtiniz.

Kümelenmiş dizin tarama işleçleriyle yürütme planı

sorgu iyileştiricisi bir arama işlemi gerçekleştirmeye zorlayabilir Sales.SalesOrderDetail Tablo belirterek forceseek ipucu olarak gösterilen aşağıdaki sorgu.

USE AdventureWorks2008R2;
GO
SELECT *
FROM Sales.SalesOrderHeader AS h
INNER JOIN Sales.SalesOrderDetail AS d WITH (FORCESEEK)
    ON h.SalesOrderID = d.SalesOrderID 
WHERE h.TotalDue > 100
AND (d.OrderQty > 5 OR d.LineTotal < 1000.00);
GO

Aşağıdaki yürütme planı gösterir sonuçlar forceseek ipucu sorgu kullanma.Kümelenmiş dizin ara işlem verilerine erişmek için kullanılan Sales.SalesOrderDetail tablo.

Kümelenmiş dizin arama işleciyle yürütme planı

Dizin Birliği ve kesişim destek

forceseek ipucu Index ve kesişimlerini destekler.İpucu bu teknikleri kullanan daha büyük olasılıkla sorgu iyileştiricisi yapar.Derleme yavaşlatmalarını önlemek için saat basit sorgular sendikalar dizin ve kesişmeler olan normal olarak o take uygulamasına göre seçilen kuralları yalnızca hesap kardinalite ve sütunları meydana.Ancak forceseek ipucu belirtildiğinde bu tür kuralları atlanır ve bu teknikleri her zaman kabul edilir.Örneğin, aşağıdaki sorgu göz önünde bulundurun:

SELECT * FROM T WITH(FORCESEEK) WHERE T.a = 1 AND T.b = 2;

Sütunları ayrı, kümelenmemiş dizinleri, a ve b , tablo T, bir dizin kesişim plan olabilir seçilmiş.Yani plan kümelenmemiş dizin içeren sütun üzerinde işlem arama a ve kümelenmemiş dizin arama sütun üzerinde işlem b, temel tablo Al. bir arama işlemi gerçekleştirmeden önce elde edilen dizin anahtar kümeleri kesişiyor ve

Aşağıdaki örnekte, bir dizin Birliği planı seçilir.Yani, bir sütunda arama işlemi planı içeren a ve bir sütun üzerinde arama işlemi b, ve ortaya çıkan sendikalar dizin anahtar temel tablo Al. bir arama işlemi gerçekleştirmeden önce kümeleri,

SELECT * FROM T WITH(FORCESEEK) WHERE T.a = 1 OR T.b = 2;

forceseek içindeki kullanan sorgular gibi kullanan veya ın

Sorgu iyileştirici kurallar ve kötü kardinalite tahmini de yerine bir dizin sorgu kullandığında arama veya arama yüklemler istediğiniz bir tablo ya da dizin tarama işlemi gerçekleştirmek en iyi duruma getiricisi neden olabilir.

Aşağıdaki örnek, nasıl zorla bir dizin gerçekleştirmek için sorgu iyileştiricisi arama işlemi yerine tablo tarama forceseek ipucu ister veya arama yüklemler kullanıldığını göstermektedir.Sorgu yürütme planları görüntülemek için tıklatın Fiili yürütme planı dahil örneği çalıştırmadan önce araç çubuğu düğmesi.

USE tempdb;
GO
DROP TABLE t;
GO
CREATE TABLE t(i int UNIQUE, j int, vc varchar(100));
CREATE INDEX t_vc ON t(vc);
GO
DECLARE @p1 int, @p2 int, @p3 int, @p4 int, @p5 int;
SELECT * FROM t WHERE i IN (@p1, @p2, @p3, @p4, @p5);
GO
DECLARE @p1 int, @p2 int, @p3 int, @p4 int, @p5 int;
SELECT * FROM t WITH (FORCESEEK) WHERE i IN (@p1, @p2, @p3, @p4, @p5);
GO
SELECT * FROM t WHERE vc LIKE 'Test%';
GO
SELECT * FROM t WITH (FORCESEEK) WHERE vc LIKE 'Test%';
GO
DECLARE @vc varchar(100);
SELECT * FROM t WHERE vc LIKE @vc;
GO
DECLARE @vc varchar(100);
SELECT * FROM t WITH (FORCESEEK) where vc like @vc;
GO

Görünümler'FORCESEEK kullanma

forceseek veya dizin ipucu olmadan belirtilebilir.forceseek tablo ipucu bir görünüm veya dizinli görünüm uygulamak, forceseek ipucu görünüm genişletilmiş bir sürüm tüm tablolar üzerinden yayılan yinelemeli olarak kullanılır.Dizin ipucu belirttiyseniz, göz ardı edilir.Temel tabloların her en az bir dizin varsa, hiçbir planı buldu ve 8622 hata döndürülür.

forceseek ve noexpand ipucu birlikte bir dizinli görünüm başvuru kullandığınızda, dizinli görünüm ilk genişletme olmadan kullanılır.forceseek ipucu bir tablo gibi davranılır doğrudan dizinli görünüm uygulanır.

forceseek ipucu tablo başvurusu uygularsanız, tablo başvurusu eşleşen dizinli görünüm içinde yer alabilir.Ancak, forceseek ipucu tarafından etkilenmez diğer bölümleri sorgu eşleşen dizinli görünüm içinde yer alabilir.Bu davranışı, karşılaştırılabilir, dizinli görünüm eşleşen dizin ipuçları ile birlikte kullanıldığında.

En iyi uygulama konuları

Aşağıdaki en iyi uygulamalar önerilir:

  • forceseek tablo ipucu kullanmadan önce veritabanı üzerinde istatistik geçerli ve doğru olduğunu emin olun.

    Yukarı-için-tarih istatistikleri farklı sorgu planlarının maliyeti doğru olarak değerlendirmek en iyi duruma getiricisi izin ve yüksek kalite planı seçin.Bu nedenle, her kullanıcı veritabanı için AUTO_CREATE_STATISTICS ve AUTO_UPDATE_STATISTICS için (varsayılan) üzerinde ayarlanması önerilir.Alternatif olarak, el ile yapabilirsiniz güncelleştirme istatistikleri bir tablo veya görünümü kullanarak güncelleştirme istatistikleri deyim.

  • Düşük kardinalite ve neden olabilir veya maliyet tahminleri, mümkünse bu öğeleri kaldırmak maddeler için bir sorguyu değerlendirmek.Örnek parametreleri veya harfleri ile yerel değişkenleri değiştirir ve multi-deyim tablo değerli işlevler ve tablo değişkenlerini sorgudaki kullanımını sınırlayın.Aranacak diğer öğeleri hakkında daha fazla bilgi için bkz: Microsoft sql Server 2005'te sorgu iyileştirici istatistiklerini kullandığı.

  • Gereksiz yere Dizin ipucu forceseek ile birlikte kullanmayın.forceseek tek başına yeterli bir plan üretir, yani ayrıca dizin ipucu kullanarak aşırı derecede en iyi duruma getiricisi olan seçenekler sınırlayabilir.Fiziksel şeması, farklı Üstelik Dizin ipucu, sorgu başarısız neden olur, tablo İpucu içinde belirtilen dizin ortadan kaldırmak için.Bunun aksine, üzerinde en az bir kullanılabilir dizin mevcut olduğundan uzun tablo forceseek ipucu uygulandığı üzerinde kendi dizin yapılarını değiştirmek gibi sorgu derleme yapılamayacak.

  • Dizin ipucu Index (0) ile forceseek ipucu kullanın.Dizin (0) temel tablo bir taramayı zorlar.forceseek ile kullanıldığında, hiçbir planı bulundu ve 8622 hata döndürülür.

  • forceseek ipucu ile kullanmak plan sorgu ipucu kullanma.Bunu yaparsanız, forceseek ipucu sayılır.