Udostępnij za pośrednictwem


Using the USE PLAN Query Hint

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.Wskazówki dotyczącej kwerendy USE PLAN może być określony jako wskazówka dotycząca kwerendy w autonomicznym instrukcja języka SQL lub określony w @ wskazówki parametr plan wykonania kwerendy.Aby dołączyć plan wykonania kwerendy kwerendy do plan wykonania kwerendy, zaleca się korzystanie z xml_showplan Parametr w sp_create_plan_guide or the sp_create_plan_guide_from_handle procedura przechowywana.

Important noteImportant Note:

Powinny zawsze wskazywać xml_plan jako literałów, określając prefiks N, jak w N Unicode"xml_plan'.W ten sposób tworzy się, że wszystkie znaki w planie specyficzne dla standardu Unicode są nie zostaną utracone podczas SQL Server Database Engine interpretuje ciąg.

W SQL ServerPlanów kwerend formacie XML może być produkowany przy użyciu następujących sposobów:

Aby uzyskać więcej informacji na temat produkcji i analizowanie planów kwerend Zobacz Analyzing a Query.

Określona w planu kwerendy w formacie XML xml_plan należy sprawdzić poprawności względem schematu XSD Showplanxml.xsd w SQL Server Katalog instalacyjny. Ponadto, w obszarze ścieżka zawierającą <ShowPlanXML> <BatchSequence> <Batch> <Statements> elementy, jedną z następujących czynności muszą pojawiać się:

  • Jeden lub więcej <StmtSimple> elementy, dokładnie jeden z nich zawiera <QueryPlan> Sub-element.

  • Jeden <StmtCursor> element, który ma dokładnie jeden <CursorPlan> Sub-element.

  • Jeden lub więcej <StmtSimple> elementy bez <QueryPlan> Sub-element i jeden <StmtCursor> element, który ma jeden <CursorPlan> Sub-element.

Można zmienić plan, przed jej użyciu przy użyciu USE, PLAN, na przykład zmieniając łączyć zamówień i operatorów, i dopasowywanie skanuje i stara się.Jednak format planu nadal muszą odpowiadać Showplanxml.xsd.Nie można wymusić planu, który został zmieniony.Wystąpi błąd, jeśli używasz w wskazówkę dotyczącą USE PLAN planu planu nie jest jeden z planów, SQL Server czy zazwyczaj warto kwerendy podczas optymalizacji.

Wygenerowany przy użyciu wskazówki dotyczącej kwerendy PLAN użycia planów kwerend są umieszczane w pamięci podręcznej, podobnie jak inne planów kwerend.

Ograniczenia do użytku PLAN kwerendy wskazówkę dotyczącą kwerendy

Zmiany w bazie danych, takich jak upuszczanie indeksy, mogą unieważnić określony przez PLAN użycia planu kwerend.Plan kwerend może stać się nieaktualne, nawet jeśli elementów usuniętych obiektów nie jest bezpośrednio wywoływany w planie.Na przykład indeks unikatowy nie może się odwoływać jawnie w planu kwerend, ale indeks jednak wymusza ograniczenie unikatowości dla danych.Plan kwerend, do której odwołuje się USE PLAN umożliwia to ograniczenie należy unikać używania określonych podmiotów gospodarczych do wymuszenia oszacowania odrębności.

Czasami instalacja dodatku usługa pack lub nowej wersja programu SQL Server może uniemożliwić wymuszanie planu produkowane we wcześniejszej wersja. Dlatego wszystkie wskazówki USE PLAN powinien zostać przetestowany za każdym razem, gdy serwer zostanie uaktualniony.

Za pomocą USE PLAN wskazówkę dotyczącą kwerendy zastępuje wszystkie wskazówki łączyć i wskazówek indeksu w tej samej kwerendy.

USE PLAN nie można użyć wskazówki kwerendy FORCE ORDER, EXPAND WIDOKÓW, GROUP, UNION lub łączyć, lub gdy FORCEPLAN zestaw jest ustawiona na ON.

Tylko plany kwerend, które w przeciwnym razie można znaleźć strategii wyszukiwania typowe optymalizator kwerendy może być zmuszona przy użyciu USE PLAN.Tych planów zazwyczaj określić, że jeden element podrzędność każdego łączyć się na poziomie poziom liścia.Aby wymusić z innymi typami kwerend za pomocą USE PLAN spowoduje błąd.

Wymuszona elementy plan kwerend

Nie wszystkie elementy z tego planu kwerend w formacie XML jest zmuszony z podpowiedzi USE PLAN.Elementy, które obliczenia wyrażeń skalarne są ignorowane, a więc są niektóre wyrażenia relacyjnej.Plan kwerend jest zmuszony do następujących elementów:

  • Planowanie struktury drzewa i kolejność obliczeń.

  • Wykonywanie takich algorytmów, jak typy sprzężeń, sortowania i związki zawodowe.

  • Indeks operacje, takie jak skanowanie, stara, przecięć i związki zawodowe.

  • Obiekty, do którego odwołuje się wyraźnie takich jak innych tabel, indeksów i funkcje.

W szczególności, SQL Server Wymusza LogicalOp, PhysicalOp, a NodeID znalezione elementy w obszarze <RelOp> element, a także wszelkie sub-elements, które odnoszą się do <PhysicalOp> operator. Inną zawartość w obszarze <RelOp> element nie jest uważany za przy użyciu PLAN.

Important noteImportant Note:

Informacje dotyczące kardynalności oszacowań ustawieniem <EstimateRows> element nie są wymuszane przez wskazówkę dotyczącą kwerendy USE PLAN. Ponieważ optymalizator kwerendy używa oszacowanie Kardynalność określić ilość pamięci, aby przeznaczyć wykonywanie kwerendy, nawet wtedy, gdy jest używany USE PLAN należy zachować dokładnych statystyk.Aby uzyskać więcej informacji zobaczUsing Statistics to Improve Query Performance.

W poniższej tabela przedstawiono wartości operator relacyjny, które są wymuszone z wskazówki dotyczącej kwerendy USE PLAN dla obu PhysicalOp i LogicalOp elementy, a wszelkie sub-elements, które są wymagane dla każdego PhysicalOp wartość. W tabela znajdują się także dodatkowe informacje, które są wymagane dla każdego operator w postaci ścieżki XPath stylu względem podelement.

PhysicalOp

LogicalOp

Podelement

Dodatkowe informacje1

Concatenation

Concatenation

Async Concat

Concat

Nie dotyczy

Constant Scan

Constant Scan

ConstantScan

Nie dotyczy

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

Nie dotyczy

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

Nie dotyczy

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

Nie dotyczy

Merge Interval

Merge Interval

MergeInterval

Nie dotyczy

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

Nie dotyczy

Parallelism

Gather Streams

Repartition Streams

Distribute Streams

Parallelism

Nie dotyczy

Row Count Spool

Eager Spool

Lazy Spool

RowCountSpool2

Nie dotyczy

Segment

Segment

Segment

Nie dotyczy

Sequence

Sequence

Sequence

Nie dotyczy

Sequence Project

Compute Scalar

SequenceProject

Nie dotyczy

Sort

Sort

Distinct Sort

Sort

Nie dotyczy

Table Spool

Index Spool

Eager Spool

Lazy Spool

Spool2

@PrimaryNodeId (dotyczy tylko buforuje pomocniczy)

../RelOp/@NodeId (dla RelOps odpowiadające podstawowym buforowanie tylko)

Stream Aggregate

Aggregate

StreamAggregate

Nie dotyczy

Switch

Switch

Switch

Nie dotyczy

Table Scan

Table Scan

TableScan

Object/@Database, Object/@Schema, Object/@Table

Table-valued function

Table-valued function

TableValuedFunction

Object/@Database, Object/@Schema, Object/@Table

(nazwa funkcja wycenione tabela jest Object/@tabela)

Top

Top

Top

Nie dotyczy

Sort

Sort

Sort

Nie dotyczy

Top Sort

TopN Sort

TopSort

Nie dotyczy

Table Insert

Insert

Update

Object/@Table

1 Numer i kolejność tych danych wejściowych dla każdego operator relacyjnego musi znajdować się, jak pokazano w tabela, aby wymusić plan z USE PLAN.

2 Możliwość wymuszania przejścia plan jest ograniczony, jeśli plan zawiera sub-element > < RowCountSpool, może pojawiać się w wymuszony planu albo < RowCountSpool > lub sub-element > < buforu. Podobnie jeśli plan zawiera <Buforu> Sub-element, może pojawiać się w planie wymuszone jako <Buforu> lub <RowCountSpool> Sub-element.

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.

Aby uzyskać więcej informacji na temat operatorów logicznych i fizycznych używanych w planów kwerend Zobacz Logical and Physical Operators Reference.

Kursor pomocy technicznej.

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.Kursory dynamicznych, opartych na zestaw kluczy i tylko przesyłanie dalej nie są obsługiwane.

Aby uzyskać więcej informacji zobaczUsing the USE PLAN Query Hint on Queries with Cursors.