use plan sorgu ipucu kullanma
The USE PLAN query hint takes an xml_plan as an argument.xml_plan is a string literal derived from the XML-formatted query plan that is produced for the query.use plan sorgu ipucu tek başına bir sql deyim, sorgu ipucu olarak belirtilen veya belirtilen @ ipuçları parametresi bir plan kılavuzu üzerinde.Bir sorgu planı için bir plan kılavuz eklemek için kullanmanız önerilir xml_showplan parametresi sp_create_plan_guide veya sp_create_plan_guide_from_handle saklı yordam.
Önemli |
---|
Her zaman göstermek xml_plan gibi n n önekini belirterek değişmez bir Unicode olarak'xml_plan'.Bunu yapan herhangi bir karakteri Unicode standardı belirli planı ne zaman kayıp değil, emin SQL Server Veritabanı Altyapısı Yorumlar dize. |
De SQL Server, xml biçimli sorgu planları üretilen aşağıdaki yollardan:
-
Önemli set showplan_xml kullanarak sorgu planları oluşturma zaman planı use plan sorgu ipucu ile kullanmadan önce planda görülen tırnak (') tarafından ikinci bir tırnak işareti konulmalıdır.Örneğin, içeren bir plan WHERE A.varchar = 'This is a string' için kod değiştirerek konulmalıdır WHERE A.varchar = ''This is a string''.
Sorgulama query_plan sütunu sys.dm_exec_query_plan dinamik yönetim işlev.
sql Server Profiler'I showplan xml, Showplan xml istatistikleri profil, ve Showplan için sorgu xml derle olay sınıfları.
Üretme ve sorgu planları çözümleme hakkında daha fazla bilgi için bkz: Bir sorgu çözümleme.
Belirtilen xml biçimli sorgu planı xml_plan Showplanxml.xsd xsd şemaya göre doğrulamak gerekir, SQL Server yükleme dizini.Ayrıca, altında yol içeren <ShowPlanXML> <BatchSequence> <Batch> <Statements> öğeleri, aşağıdakilerden birini gerekir görünür:
Bir veya daha fazla <StmtSimple> öğeleri, tam olarak bir birini içeren bir <QueryPlan> eklendiyse.
Bir <StmtCursor> öğesi tam olarak biri olan <CursorPlan> eklendiyse.
Bir veya daha fazla <StmtSimple> öğeleri olmadan bir <QueryPlan> eklendiyse ve bir <StmtCursor> biri olan öğe <CursorPlan> eklendiyse.
Planı plan, kullanmak gibi birleştirmek Siparişler ve operatörleri, değiştirerek kullanarak kullanmak ve taramalar ve aramalarının ayarlanması önce değiştirebilirsiniz.Ancak, biçim planının hala Showplanxml.xsd eşleşmelidir.Değiştirilmiş bir plan zorlamak mümkün olmayabilir.Planı planları biri değil, bir plan içinde bir plan kullanın ipucu kullanırsanız bir hata oluşur, SQL Server genelde düşünün sorgu en iyi duruma getirilmesi sırasında
use plan sorgu ipucu ile oluşturulan sorgu planları yalnızca gibi diğer sorgu planları önbelleğe alınır.
use plan sorgu ipucu sınırlamaları
Bir sorgu planı kullanmak planı tarafından belirtilen dizinler bırakılıyor gibi veritabanı değişiklik koşullarına aykırı olabilir.Bir sorgu planı bırakılan nesne planında doğrudan başvurulan bile eski haline gelebilir.Örneğin, bir sorgu planı içinde benzersiz dizin açıkça başvurulan, ancak dizin yine de verilere göre bir benzersiz kısıtlamayı zorlar.KULLANMA planı tarafından başvurulan bir sorgu planı distinctness zorlamak için belirli işleçleri kullanmaktan kaçınmak için bu sınırlama kullanabilirsiniz.
Bazı durumlarda, bir hizmet paketi veya yeni bir sürüm yükleme SQL Server engelleyebilir, zorlama planı tarafından daha önceki bir sürüm.Bu nedenle, her sunucu yükseltilir kullanmak PLANLADIĞINIZ tüm ipuçlarını sınanacağı.
use planla ipucu sorgu kullanma tüm birleştirmek ipuçları ve aynı sorguda kullanılan dizin ipuçları geçersiz kılar.
use planla force order, GÖRÜNÜMLER genişletin, Grup, BİRLİĞİ veya birleştirme sorgu ipuçları ile veya küme forceplan on olarak ayarlandığında kullanılamaz.
Aksi halde sorgu iyileştiricisi'ın tipik arama stratejisi tarafından bulunan sorgu planları use plan kullanarak zorlayabilir.Bu planlar genellikle, her bir alt belirtmek birleştirmek yaprak düzey olması.Diğer sorgu türleri zorlamak use plan kullanarak bir hata neden olur.
Sorgu planı öğeleri Zorlanmış
Tüm öğeleri xml biçimli sorgu planı ile kullanım planı ipucu zorlanır.skaler ifadeleri hesaplamak öğeler dikkate alınmaz ve bu nedenle bazı ilişkisel deyimleridir.Sorgu planı aşağıdaki öğe türlerini zorlanır:
Ağaç yapısı ve değerlendirme sırasını planlayın.
birleştirmek türleri, sıralama ve sendikalar gibi yürütme algoritmaları.
Dizin işlemleri gibi tarar gibi yararlanılabileceğini, kesişmeler ve sendikalar.
Diğer tabloları, dizinleri ve işlevler gibi açıkça başvurulan nesneler.
Özellikle, SQL Server zorlar LogicalOp, PhysicalOp, ve NodeID altında bulunan öğelere <RelOp> öğesi ve ayrıca ilgili tüm alt <PhysicalOp> işleç.Diğer içerik altında <RelOp> olarak öğe değil kabul edilir göre kullanım planı.
Önemli |
---|
kardinalite tahminleri hakkında bilgi dikte tarafından <EstimateRows> öğesi zorlanmamış use plan sorgu ipucu.Çünkü sorgu iyileştiricisi kardinalite tahmini bir sorguyu çalıştırmanın ayırmak için bellek miktarını belirlemek için kullandığı doğru İstatistikler bile, use plan kullanırken korumak.Daha fazla bilgi için bkz: İstatistikler sorgu performansını artırmak için kullanma. |
Aşağıdaki tablo use plan sorgu ipucu ile her ikisi için zorlanır ilişkisel işleç değerlerini listeler PhysicalOp ve LogicalOp maddeler ve her biri için gerekli olan alt PhysicalOp değer.Tablo stili XPath yollara göre alt öğesi formunda her işleç için gerekli olan ek bilgileri de içerir.
PhysicalOp |
LogicalOp |
Alt öğesi |
Ek bilgi1 |
---|---|---|---|
Concatenation |
Concatenation Async Concat |
Concat |
Uygulanabilir değil |
Constant Scan |
Constant Scan |
ConstantScan |
Uygulanabilir değil |
Deleted Scan |
Deleted Scan |
DeletedScan |
Object/@Table |
UDX |
UDX |
Extension |
@UDXName |
Hash Match |
Inner Join Left Outer Join Right Outer Join Full Outer Join Left Semi Join Left Anti Semi Join Right Semi Join Right Anti Semi Join Aggregate Partial Aggregate Flow Distinct Union |
Hash |
Uygulanabilir değil |
RID Lookup |
RID Lookup |
IndexScan |
Object/@Database, Object/@Schema, Object/@Table |
Index Scan Clustered Index Scan |
Index Scan Clustered Index Scan |
IndexScan |
Object/@Database, Object/@Schema, Object/@Table Object/@Index |
Index Seek Clustered Index Seek |
Index Seek Clustered Index Seek |
IndexScan |
Object/@Database, Object/@Schema, Object/@Table Object/@Index |
Inserted Scan |
Inserted Scan |
InsertedScan |
Object/@Table |
Log Row Scan |
Log Row Scan |
LogRowScan |
Uygulanabilir değil |
Merge Join |
Inner Join Left Outer Join Right Outer Join Full Outer Join Left Semi Join Left Anti Semi Join Right Semi Join Right Anti Semi Join Cross Join Concatenation Union |
Merge |
Uygulanabilir değil |
Merge Interval |
Merge Interval |
MergeInterval |
Uygulanabilir değil |
Nested Loops |
Inner Join Left Outer Join Right Outer Join Full Outer Join Left Semi Join Left Anti Semi Join Right Semi Join Right Anti Semi Join Cross Join |
NestedLoops |
Uygulanabilir değil |
Parallelism |
Gather Streams Repartition Streams Distribute Streams |
Parallelism |
Uygulanabilir değil |
Row Count Spool |
Eager Spool Lazy Spool |
RowCountSpool2 |
Uygulanabilir değil |
Segment |
Segment |
Segment |
Uygulanabilir değil |
Sequence |
Sequence |
Sequence |
Uygulanabilir değil |
Sequence Project |
Compute Scalar |
SequenceProject |
Uygulanabilir değil |
Sort |
Sort Distinct Sort |
Sort |
Uygulanabilir değil |
Table Spool Index Spool |
Eager Spool Lazy Spool |
Spool2 |
@PrimaryNodeId (yalnızca ikincil biriktirir için) ../RelOp/@NodeId (yalnızca birincil biriktiricileri temsil eden RelOps için) |
Stream Aggregate |
Aggregate |
StreamAggregate |
Uygulanabilir değil |
Switch |
Switch |
Switch |
Uygulanabilir değil |
Table Scan |
Table Scan |
TableScan |
Object/@Database, Object/@Schema, Object/@Table |
Table-valued function |
Table-valued function |
TableValuedFunction |
Object/@Database, Object/@Schema, Object/@Table (tablo değerli işlev adı Object/@Table'dır) |
Top |
Top |
Top |
Uygulanabilir değil |
Sort |
Sort |
Sort |
Uygulanabilir değil |
Top Sort |
TopN Sort |
TopSort |
Uygulanabilir değil |
Table Insert |
Insert |
Update |
Object/@Table |
1 Sıra ve sayıda bu girişleri her ilişkisel işleç için gösterildiği gibi görünmesi gerekir tablo kullanım planı ile bir plan zorlamak için.
2 Plan içeriyorsa, bir plan zorlama yeteneği, sınırlı bir <RowCountSpool> eklendiyse, bu görünebilir, zorlanan bir plan olarak ya da bir <RowCountSpool> veya bir <biriktirme> eklendiyse.Benzer şekilde, planın içeriyorsa, bir <Biriktirme> eklendiyse, bu görünebilir zorunlu bir plan, bir <Biriktirme> veya <RowCountSpool> eklendiyse.
The Assert, Bitmap, ComputeScalar, and PrintDataFlow operators are ignored by USE PLAN.The Filter operator is considered by USE PLAN, but its exact location in the plan cannot be forced.
Sorgu planları içinde kullanılan fiziksel ve mantıksal işleçleri hakkında daha fazla bilgi için bkz: Fiziksel ve mantıksal işleçleri başvurusu.
İmleç desteği
You can use the USE PLAN query hint together with queries that specify static or fast-forward-only cursors, whether requested through Transact-SQL or an API cursor function.Transact-SQL static cursors with a forward-only option are supported.Dinamik, anahtar kümesi kullanımlı ve salt ileri imleçler desteklenir.
Daha fazla bilgi için bkz: use plan sorgu ipucu imleçler ile sorgular kullanma.