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 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:
-
Important Note: Podczas generowania planów kwerend za pomocą zestaw SHOWPLAN_XML znaki cudzysłowu ('), które są wyświetlane w planie muszą mieć zmienione znaczenie za przez drugi znak cudzysłowu przed użyciem planu z wskazówki dotyczącej kwerendy USE PLAN.Na przykład planu, który zawiera WHERE A.varchar = 'This is a string' muszą mieć zmienione znaczenie za przez zmodyfikowanie kodu do WHERE A.varchar = ''This is a string''.
Podczas badania query_plan kolumnasys.dm_exec_query_plan funkcja dynamicznego zarządzania.
Program SQL Server Profiler plan wykonania XML, Profil Statystyka plan wykonania XML, and plan wykonania XML dla Compile do kwerendy klas zdarzeń.
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 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.