Za pomocą kwerendy wskazówkę dotyczącą stosowania planu
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ówka dotycząca kwerendy przewodnik planu wykorzystania mogą być określone jako wskazówka dotycząca kwerendy w autonomicznym instrukcja języka SQL lub określone w @ wskazówki parametr przewodnik planu.Do przewodnik planu, należy dołączyć przewodnik planu kwerend, zaleca się używanie xml_showplan parametr w sp_create_plan_guide lub sp_create_plan_guide_from_handle procedura składowana.
Ważne: |
---|
Zawsze należy wskazać xml_plan jako Unicode literału, określając prefiks N, jak w n'xml_plan".W ten sposób tworzy się, że wszystkie znaki w planie określonego standardu Unicode nie zostaną utracone podczas Aparat baz danych programu SQL Server interpretuje ciąg. |
W SQL Server, planów kwerend w formacie XML może być produkowany przy użyciu następujących sposobów:
-
Ważne: Gdy planów kwerend jest generowany przy użyciu zestawu SHOWPLAN_XML, cudzysłów ('), które są wyświetlane w planie należy wyjściowym przez drugi znak cudzysłowu przed użyciem planu z kwerendy wskazówkę dotyczącą stosowania planu.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''.
Badanie query_plan kolumna sys.dm_exec_query_plan funkcja dynamicznego zarządzania.
Program SQL Server Profiler showplan xml, Profilu statystyki XML Showplan, i XML kwerendy skompilować dla Showplan zdarzenie klasy.
Aby uzyskać więcej informacji dotyczących produkcji i analizowanie planów kwerend, zobacz Analizowanie kwerendy.
Plan kwerend w formacie XML, określone w xml_plan musi sprawdzania poprawności schematu XSD Showplanxml.xsd w SQL Server katalogu instalacji.Ponadto w ramach ścieżka zawiera <ShowPlanXML> <BatchSequence> <Batch> <Statements> elementów, jeden z następujących musi znajdować się:
Jeden lub więcej <StmtSimple> elementy dokładnie jedna zawiera <QueryPlan> elementu podrzędnego.
Jeden <StmtCursor> element, który ma dokładnie jeden <CursorPlan> elementu podrzędnego.
Jeden lub więcej <StmtSimple> elementy bez <QueryPlan> elementu podrzędnego, a jeden <StmtCursor> zawiera jeden element <CursorPlan> elementu podrzędnego.
Plan można zmienić przed korzystać przy użyciu takich jak użyć planu, zmieniając łączyć zamówienia i operatorów, i dopasowywanie skanuje i stara.Jednak format planu nadal muszą odpowiadać Showplanxml.xsd.Nie można wymusić planu, który został zmieniony.Wystąpi błąd, jeśli plan w wskazówka użyć planu podczas plan nie jest jeden z planów, SQL Server zazwyczaj rozważający kwerendy podczas optymalizacji.
Podobnie jak inne plany kwerend są buforowane wygenerowany PLAN wykorzystania wskazówkę dotyczącą kwerendy planów kwerend.
Ograniczenia użycia PLAN wskazówkę dotyczącą kwerendy
Zmiany w bazie danych, takie jak usuwanie indeksów, mogą unieważnić planu kwerend, określone przez użycie planu.Plan kwerend może stać się przestarzałe, nawet jeśli obiekt porzuconych nie odwołuje się bezpośrednio do planu.Na przykład indeks unikatowy może nie mogą odwoływać się do wyraźnie planu kwerend, ale indeks niemniej wymusza ograniczenie unikatowości dla danych.Planu kwerend, który odwołuje się użyć planu umożliwia unikać niektóre podmioty gospodarcze, aby wymusić odrębność tego ograniczenia.
Czasami instalacja dodatku usługa pack lub wydanie nowego SQL Server może uniemożliwić wymuszanie plan produkowane przez starszych wersja.Dlatego wszystkie wskazówki planu wykorzystania powinny być badane przy każdym uaktualnieniu serwera.
Za pomocą planu wykorzystania wskazówka w kwerendzie zastępuje wszystkie wskazówki łączyć i wskazówki index w tej samej kwerendzie.
UŻYJ PLAN nie można używać z podpowiedzi kwerendy FORCE ORDER, rozwiń WIDOKI, grupy, Unii lub sprzężenia lub gdy zestaw jest FORCEPLAN zestaw on.
Tylko plany kwerend, które w przeciwnym razie można znaleźć strategii typowe wyszukiwania optymalizator kwerendy można wymuszone za pomocą planu wykorzystania.Plany te ogólnie określić, że jeden podrzędność każdego łączyć wynosić poziom liścia poziom.Za pomocą planu wykorzystania zmusić innych typów kwerend spowoduje błąd.
Wymuszone elementów planu kwerend
Nie wszystkie elementy planu kwerend w formacie XML jest zmuszony z wskazówkę dotyczącą stosowania planu.Elementy, które służą do obliczania wyrażeń wartość skalarna są ignorowane, a więc są niektóre wyrażenia relacyjnej.Plan kwerend jest zmuszony do następujące elementy:
Planowanie struktury drzewa i kolejność.
Wykonanie takich algorytmów, jak typy łączyć, sortowania i związków.
Indeks operacje, takie jak skanowanie, stara, przecięcia i związków.
Obiekty wywoływane jawnie takich jak innych tabel, indeksów i funkcji.
W szczególności SQL Server wymusza LogicalOp, PhysicalOp, i NodeID znalezione elementy pod <RelOp> element, a także wszelkie temu, które odnoszą się do <PhysicalOp> operator.Inne zawartości <RelOp> element nie jest uważany za przy użyciu planu.
Ważne: |
---|
Informacje dotyczące kardynalność szacunki dyktowana przez <EstimateRows> element nie jest wymuszane przez wskazówkę dotyczącą kwerendy planu wykorzystania.Ponieważ optymalizator kwerendy używa oszacowanie Kardynalność do ustalenia ilości pamięci przeznaczyć do uruchamiania kwerendy, nawet wtedy, gdy używasz użycia PLAN powinien utrzymywać dokładne statystyki.Aby uzyskać więcej informacji, zobacz Aby poprawić wydajność kwerendy przy użyciu statystyk. |
W poniższej tabela przedstawiono wartości operator relacyjny, które są wymuszone z planu wykorzystania wskazówkę dotyczącą kwerendy dla obu PhysicalOp i LogicalOp elementów, a wszelkie temu, które są wymagane dla każdego PhysicalOp wartości.Tabela ta zawiera także dodatkowe informacje wymagane dla każdego operator w postaci ścieżki XPath styl 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 buforuje 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 (funkcja zwracająca tabelę nazwa 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 nakładów dla każdego operator relacyjnego musi znajdować się jak pokazano w tabela, aby wymusić plan z planu wykorzystania.
2 Możliwość wymuszania plan jest ograniczony, jeśli plan zawiera <RowCountSpool> elementu podrzędnego, mogą być widoczne w planie wymuszone jako <RowCountSpool> lub <buforu> elementu podrzędnego.Podobnie jeśli plan zawiera <buforu> elementu podrzędnego, mogą być widoczne w planie wymuszone jako <buforu> lub <RowCountSpool> elementu podrzędnego.
Assert, Bitmap, ComputeScalar, I PrintDataFlow operatory są ignorowane przez użycie planu.Filter Operator jest uważana przez użycie planu, ale nie można wymusić jego dokładną lokalizację w planie.
Aby uzyskać więcej informacji o fizyczne i logiczne operatory używane w planów kwerend, zobacz Odwołanie do operatorów logicznych i fizycznych.
Obsługa kursora
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 dynamicznej, opartej na zestaw kluczy i tylko do przodu nie są obsługiwane.
Aby uzyskać więcej informacji, zobacz Za pomocą planu użycia kwerendy wskazówkę dotyczącą na kwerendach z kursorów.