Udostępnij za pośrednictwem


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żna informacjaWaż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:

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żna informacjaWaż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.