Aracılığıyla paylaş


Ipucu FORCESEEK tablo kullanma

Bir dizin kullanmak için sorgu iyileştiricisi arama işlemi tablo veya sorguda başvurulan görünümünde veri erişim yol olarak FORCESEEK tablo ipucu zorlar.Bu tablo ipucu, bir verimsiz bir sorgu planı tarafından neden olduğu performans sorunlarını önlemek için sorgu iyileştiricisi tarafından seçilmiş varsayılan planı geçersiz kılmak için kullanabilirsiniz.Örneğin, bir planı tablo ya da dizin taramayı işleçler içeriyorsa ve okumalar çok yüksek bir sayıda sorgu yürütülürken, gözlemlenen gibi ilgili tablolara neden İSTATİSTİK GÇ çıktı dizin zorlama, arama işlemi daha iyi bir sorgu performansı getirebilecek.Bu özellikle yanlış olduğunda doğru önem düzeyi, veya maliyet tahminler, en iyi duruma getiricisi tarama işlemleri derleme saat planı dikkate neden olabilir.

ALTER FULLTEXT INDIS... START POPÜLASYON deyim verilen kadar dizinin yok bir popülasyon oluşur.Herhangi bir tablo veya Görünüm SELECT deyiminin FROM yan tümcesinde ve FROM belirtilebilir <table_source> bir UPDATE veya DELETE deyim yan tümce.

Uyarı

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

Query'yi değerlendirdiğiniz FORCESEEK uygulanabilirliği için plan.

FORCESEEK tablo ipucu yararlı olabilecek bir tablo veya Görünüm, tablo ya da dizin taramayı işleç Sorgu planını kullanır, ancak dizin arama işleç daha verimli olabilir.Aşağıdaki sorgu ve sonraki yürütme planı dikkate alın.

sorgu iyileştiricisi, her iki tabloda bulunan verilere erişmek için bir kümelenmiş dizin tarama işlecini seçtiyseniz aşağıdaki yürütme planını gösterir.

Execution plan with clustered index scan operators

Bir arama işlemi gerçekleştirmeye sorgu iyileştiricisi zorlayabilir Sales.SalesOrderDetail Tablo, aşağıdaki sorguda gösterilen FORCESEEK ipucu belirterek.

Yürütme planı aşağıdaki sorguda FORCESEEK ipucu kullanarak sonuçlarını gösterir.kümelenmiş dizin arama işlemi verilerde erişmek için kullanılan Sales.SalesOrderDetail TABLO.

Execution plan with clustered index seek operator

Dizin Birliği ve kesişimi desteği

FORCESEEK ipucu dizin sendikalar ve kesişme noktalarında destekler.Ipucu, sorgu iyileştiricisi bu teknikleri ayný þekilde kullanmayý daha olası hale getirir.Derleme yavaşlatmalarını önlemek için saat Basit Sorgu, dizin sendikalar ve kesişme noktalarında olan normal olarak, alma içine göre seçilen kuralları yalnızca hesap önem ve sütunların selectivity.Ancak FORCESEEK ipucu belirtilmişse, bu kuralları atlanır ve bu teknikler, her zaman kabul edilir.Örneğin, aşağıdaki sorguyu göz önünde bulundurun:

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

Sütunları ayrı, kümelenmemiş dizin yoksa a ve b Tablo T, bir Dizin kesişim planı seçmiş olabilirsiniz. Diğer bir deyişle, bu plan kümelenmemiş bir dizin içeren sütun işlemi arama a ve bir kümelenmemiş dizin arama işlemi sütun bve içine bir arama işlemi gerçekleştirmeden önce oluşturulan dizin anahtar kümesi kesişiyor temel tablo.

Aşağıdaki örnekte, bir dizin sendika planı seçilir.Diğer bir deyişle, planın bir arama işlemi sütun içerir. a ve sütunu olan bir arama işlemi bve elde edilen dizin anahtarının ayarlar, temel olarak bir arama işlemi gerçekleştirilmeden önce sendikalar tablo.

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

FORCESEEK olarak kullanarak, LIKE kısımlarına kullan sorgular veya IN

sorgu iyileştiricisi kuralları ve kötü önem düzeyi tahmini dizin sorguda IN kullandığında arama veya arama yüklemler LIKE yerine tablo ya da dizin tarama işlemi gerçekleştirmek en iyi duruma getiricisi de neden olabilir.

Aşağıdaki örnekte gösterilmiştir: zorla dizin gerçekleştirmek için sorgu iyileştiricisi arama işlemi yerine göre bir tablo taraması ne zaman FORCESEEK ipucu nasıl LIKE veya IN arama yüklemler kullanılır.Sorgu yürütme planları'nı görüntülemek için tıklatın Fiili yürütme planı içerir. araç çubuğu düğmesi örneği çalıştırmadan önce.

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 olan veya olmayan bir dizin ipucu belirtilebilir.Bir FORCESEEK uyguladığınızda tablo FORCESEEK ipucu tüm tablo s genişletilmiş görünümü sürümünde üzerinden yayılmasını özyinelemeli olarak olduğundan görünüm veya dizinli görünüm, ipucu.Dizin ipucu, belirtilen, göz ardı edilir.Temel tablo, her en az bir dizin yoksa, yok bir plan bulunur ve 8622 hata döndürdü.

FORCESEEK ve NOEXPAND ipuçları birlikte dizinli görünüm için bir başvuru üzerinde kullanıyorsanız, dizinlenmiş görünümün olmadan önce genişletmeden kullanılır.Bir tablo gibi işlem görür, doğrudan dizinlenmiş görünümün FORCESEEK ipucu uygulanır.

Tablo başvuru FORCESEEK bir ipucu uygularsanız, tablo başvurusu dizinli görünüm tam olarak katılabilirsiniz değil.Ancak, sorgu diğer bölümlerini etkilemeden olan tarafından FORCESEEK ipucu dizinli görünüm tam olarak katılabilirsiniz.Bu, dizinli görünüm INDEX ipuçlarının ile kullanıldığında eşleştirme davranışını karşılaştırılabilir.

En iyi yöntemler konusunda dikkat edilmesi gerekenler

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

  • FORCESEEK tablo ipucu kullanmadan önce veritabanı ile ilgili istatistik geçerli ve doğru olduğundan emin olun.

    Güncel istatistikleri, farklı sorgu planları maliyetini doğru olarak değerlendirmek en iyi duruma getiricisi izin ve yüksek kaliteli bir plan seçin.Bu nedenle, AUTO_CREATE_STATISTICS ve AUTO_UPDATE_STATISTICS için ON (varsayılan) için her bir kullanıcının veritabanı ayarlanması önerilir.Alternatif olarak, el ile bir tablo veya Görünüm istatistiklerini kullanarak güncelleştirebilirsiniz İSTATİSTİKLERİ GÜNCELLEŞTİRME ekstresi.

  • Düşük önem düzeyi ve neden olabilir veya tahminleri için maliyet bu öğeleri olanaklıysa kaldırmak maddeler için sorgu değerlendirin.Örneğin, yerel değişken parametreleri veya harfleri ile değiştirmek ve multi-deyim tablo değerli işlevler ve Tablo değişkenlerini sorgudaki kullanımını.Aranacak diğer maddelerle ilgili daha fazla bilgi için bkz: sorgu iyileştiricisi, Microsoft SQL Server 2005 ile kullanım istatistikleri.

  • Gereksiz DIZIN ipucu FORCESEEK birlikte kullanmayın.FORCESEEK tek başına yeterli bir plan üretir, diğer bir deyişle, aynı zamanda INDEX ipucu kullanarak aşırı derecede iyileştirici olan seçenek sınırlayabilir.Fiziksel şemasını değiştirirseniz, ayrıca, bir DIZIN ipucu, sorguyu başarısız neden olacak şekilde tablo ipucu belirtilen dizin elemek için.Buna ek olarak, kullanılabilir olan en az bir dizin FORCESEEK ipucu uygulandığı tablonun varolduğundan sürece, dizin yapılarını değiştirmek gibi sorgu derlenir.

  • DIZIN ipucu INDIS (0) ile FORCESEEK ipucu kullanmayın.INDIS (0), temel tablo taranmasını zorlar.Hiçbir planı FORCESEEK ile kullanıldığında, bulunan ve 8622 hata döndürdü.

  • KULLANÝN PLANLA sorgu ipucu FORCESEEK ipucu kullanmayın.Bunu yaparsanız, FORCESEEK ipucunu göz ardı edilir.