Delen via


Naslaginformatie over logische en fysieke showplan-operator

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Operators beschrijven hoe SQL Server een query of een DML-instructie (Data Manipulation Language) uitvoert. De queryoptimalisatie gebruikt operators om een queryplan te maken om het resultaat te maken dat is opgegeven in de query of om de bewerking uit te voeren die is opgegeven in de DML-instructie. Het queryplan is een structuur die bestaat uit fysieke operators. U kunt het queryplan weergeven met behulp van de SET SHOWPLAN instructies, de grafische opties voor het uitvoeringsplan in SQL Server Management Studio of de showplan-gebeurtenissen voor uitgebreide gebeurtenissen.

Operators worden geclassificeerd als logische en fysieke operators.

Logische operatoren

Logische operators beschrijven de relationele algebraïsche bewerking die wordt gebruikt om een instructie te verwerken. Met andere woorden, logische operators beschrijven conceptueel welke bewerking moet worden uitgevoerd.

Fysieke operators

Fysieke operators implementeren de bewerking die wordt beschreven door logische operators. Elke fysieke operator is een object of routine die een bewerking uitvoert. Sommige fysieke operators hebben bijvoorbeeld toegang tot kolommen of rijen uit een tabel, index of weergave. Andere fysieke operators voeren bewerkingen uit, zoals berekeningen, aggregaties, controles van gegevensintegriteit of joins. Fysieke operators hebben kosten die eraan zijn gekoppeld.

De fysieke operators initialiseren, verzamelen gegevens en sluiten. De fysieke operator kan met name de volgende drie methode-aanroepen beantwoorden:

  • Open(): De Open() methode zorgt ervoor dat een fysieke operator zichzelf initialiseert en eventuele vereiste gegevensstructuren instelt. Hoewel de fysieke operator mogelijk veel Open() oproepen ontvangt, ontvangt deze meestal slechts één.

  • GetRow(): De GetRow() methode zorgt ervoor dat een fysieke operator de eerste of volgende rij met gegevens opvragen. De fysieke operator kan nul of veel GetRow() oproepen ontvangen.

  • Close(): De Close() methode zorgt ervoor dat een fysieke operator enkele opschoonbewerkingen uitvoert en zichzelf afsluit. Een fysieke operator ontvangt slechts één Close() oproep, maar een Close() oproep is niet altijd gegarandeerd.

De GetRow() methode retourneert één rij met gegevens en het aantal keren dat deze wordt aangeroepen, wordt weergegeven als ActualRows in de showplan-uitvoer die wordt geproduceerd door het grafische en XML-showplan. Zie SET STATISTICS PROFILE en SET STATISTICS XML voor meer informatie over deze SET opties.

De aantallen ActualRebinds en ActualRewinds die worden weergegeven in de showplan-uitvoer, verwijzen naar het aantal keren dat de Open() methode wordt aangeroepen. Tenzij een operator zich aan de binnenkant van een geneste lus join bevindt, is ActualRebinds gelijk aan één en is ActualRewinds gelijk aan nul. Als een operator zich aan de binnenzijde van een lus-join bevindt, moet het totale aantal rebinds en terugspoelen gelijk zijn aan het aantal rijen dat aan de buitenzijde van de join is verwerkt. Een rebind betekent dat een of meer van de gecorreleerde parameters van de join zijn gewijzigd en dat de binnenste zijde opnieuw moet worden geëvalueerd. Een terugspoelen betekent dat geen van de gecorreleerde parameters is gewijzigd en dat de vorige interne resultatenset opnieuw kan worden gebruikt.

ActualRebinds en ActualRewinds zijn aanwezig in XML-showplan-uitvoer die wordt geproduceerd met behulp van SET STATISTICS XML ON en het grafische showplan. Ze worden alleen ingevuld voor de operatoren niet-geclusterde indexpool, externe query, aantal rijen, sorteren, tabelspool en tabelwaardefunctie . ActualRebinds en ActualRewinds kunnen ook worden ingevuld voor de operators Assert en Filter wanneer het kenmerk StartupExpression is ingesteld op TRUE.

Wanneer ActualRebinds en ActualRewinds aanwezig zijn in een XML-showplan, zijn ze vergelijkbaar met EstimateRebinds en EstimateRewinds. Wanneer ze afwezig zijn, is het geschatte aantal rijen (EstimateRows) vergelijkbaar met het werkelijke aantal rijen (ActualRows). Werkelijke grafische showplan-uitvoer geeft nullen weer voor de werkelijke rebinds en werkelijke terugspoelen wanneer ze afwezig zijn.

Een gerelateerd teller, ActualEndOfScans, is beschikbaar in het XML- en grafische showplan. Wanneer een fysieke operator het einde van de gegevensstroom bereikt, wordt deze teller met één verhoogd. Een fysieke operator kan het einde van de gegevensstroom nul, één of meerdere keren bereiken. Net als bij rebinds en terugspoelen kan het aantal scans meer dan één zijn, alleen als de operator zich aan de binnenkant van een lus-join bevindt. Het aantal scans moet kleiner zijn dan of gelijk zijn aan de som van het aantal rebinds en terugspoelen.

Fysieke en logische operators toewijzen

Met Query Optimizer wordt een queryplan gemaakt als een structuur die bestaat uit logische operators. Nadat de queryoptimalisatie het plan heeft gemaakt, kiest de Query Optimizer de meest efficiënte fysieke operator voor elke logische operator. De queryoptimalisatie maakt gebruik van een op kosten gebaseerde benadering om te bepalen welke fysieke operator een logische operator implementeert.

Normaal gesproken kan een logische bewerking worden geïmplementeerd door meerdere fysieke operators. In zeldzame gevallen kan een fysieke operator echter ook meerdere logische bewerkingen implementeren.

Uitvoering van batchmodus

Uitvoering van batchmodus is een queryverwerkingsmethode die wordt gebruikt om meerdere rijen samen te verwerken (vandaar de termbatch) in plaats van één rij tegelijk. Batchmodusverwerking maakt gebruik van algoritmen die zijn geoptimaliseerd voor CPU's met meerdere kernen en meer geheugendoorvoer op moderne hardware. Batchmodus kan worden gebruikt door een set operators voor zowel rowstore- als columnstore-objecten. Zie de architectuurhandleiding voor queryverwerking voor meer informatie.

Beschrijvingen van operatoren

Deze sectie bevat beschrijvingen van de logische en fysieke operators. U kunt de eigenschappen van queryplannen en operators weergeven met behulp van het deelvenster Eigenschappen in de weergave Queryplan van SQL Server Management Studio (SSMS).

Aanbeveling

Wanneer een bepaald pictogram voor een grafisch uitvoeringsplan een gele cirkel heeft met twee pijlen van rechts naar links, betekent dit dat de operator parallel wordt uitgevoerd. Zie de handleiding thread- en taakarchitectuur voor meer informatie over parallelle uitvoering.

Icon Showplan-operator Description
Adaptieve join Met de operator Adaptive Join kunt u kiezen uit een hash-join- of geneste lussen-joinmethode totdat de eerste invoer is gescand.

Adaptive Join is een fysieke operator. Zie Adaptieve joins begrijpen voor meer informatie.
Aggregaat De operator Aggregaat berekent een expressie die MIN, MAX, SUMof COUNTAVG.

Aggregaat is een logische en fysieke operator.
Rekenkundige expressie Met de operator Rekenkundige expressie wordt een nieuwe waarde berekend op basis van bestaande waarden in een rij. Rekenkundige expressie wordt niet gebruikt in nieuwere versies van SQL Server.
Beweren De operator Assert controleert een voorwaarde. Het valideert bijvoorbeeld referentiële integriteit of zorgt ervoor dat een scalaire subquery één rij retourneert. Voor elke invoerrij evalueert de operator Assert de expressie in het deelvenster Eigenschappen van het uitvoeringsplan. Als deze expressie wordt geëvalueerd NULL, wordt de rij doorgegeven via de operator Assert en wordt de queryuitvoering voortgezet. Als deze expressie resulteert in een niet-null-waarde, wordt de juiste fout gegenereerd.

Assert is een fysieke operator.
Toewijzen De operator Toewijzen wijst de waarde van een expressie of een constante toe aan een variabele.

Toewijzen is een taalelement.
Geen Async Concat De Async Concat-operator wordt alleen gebruikt in externe query's (gedistribueerde query's). Het bevat n onderliggende knooppunten en één bovenliggend knooppunt. Normaal gesproken zijn sommige onderliggende computers externe computers die deelnemen aan een gedistribueerde query. Async Concat-problemen roept Open() alle onderliggende items tegelijk aan en past vervolgens een bitmap toe op elk kind. Voor elke bit die een 1is, verzendt Async Concat de uitvoerrijen naar het bovenliggende knooppunt op aanvraag.
Bitmap SQL Server maakt gebruik van de bitmapoperator voor het implementeren van bitmapfilters in parallelle queryplannen. Bitmapfilter versnelt de uitvoering van query's door rijen met sleutelwaarden te elimineren die geen joinrecords kunnen produceren voordat rijen worden doorgegeven via een andere operator, zoals de operator Parallelism . Een bitmapfilter maakt gebruik van een compacte weergave van een set waarden uit een tabel in een deel van de operatorstructuur om rijen uit een tweede tabel in een ander deel van de structuur te filteren. Door onnodige rijen vroeg in de query te verwijderen, hebben volgende operators minder rijen om mee te werken en worden de algehele prestaties van de query verbeterd. De optimizer bepaalt wanneer een bitmap selectief genoeg is om nuttig te zijn en in welke operators het filter moeten worden toegepast.

Bitmap is een fysieke operator.
Bitmap maken De operator Bitmap maken wordt weergegeven in de uitvoer van het showplan waarin bitmaps worden gebouwd.

Bitmap Maken is een logische operator.
Geen Vertakkingsherpartition In een parallel queryplan zijn er soms conceptuele regio's van iterators. Alle iterators binnen een dergelijke regio kunnen worden uitgevoerd door parallelle threads. De regio's zelf moeten serieel worden uitgevoerd. Sommige van de parallellisme-iterators binnen een afzonderlijke regio worden Vertakkingsherpartition genoemd. De parallellisme-iterator aan de grens van twee dergelijke regio's wordt Segmentherpartition genoemd.

Vertakkingsherpartition en segmentherpartition zijn logische operators.
Uitzending Broadcast heeft één onderliggend knooppunt en n bovenliggende knooppunten. Broadcast verzendt de invoerrijen naar meerdere consumenten op aanvraag. Elke consument krijgt alle rijen. Als alle gebruikers bijvoorbeeld build-zijden van een hash-join zijn, worden er n kopieën van de hash-tabellen gemaakt.
Build-hash Geeft de build van een batch-hashtabel aan voor een columnstore-index die is geoptimaliseerd voor geheugen.

Van toepassing op: Alleen SQL Server 2012 (11.x).
Geclusterde index verwijderen De operator Clustered Index Delete verwijdert rijen uit de geclusterde index die is opgegeven in de eigenschap Object , die wordt vermeld in het deelvenster Eigenschappen van de grafische en XML-showplans. Als er een SeekPredicate of Predicaat aanwezig is, worden alleen de rijen die voldoen aan het predicaat verwijderd.

Notitie: Wijzigingen in geclusterde indexen kunnen van invloed zijn op niet-geclusterde indexen.

Clustered Index Delete is een fysieke operator.
Geclusterde index invoegen De operator Geclusterde index invoegen voegt rijen uit de invoer in de geclusterde index die is opgegeven in de eigenschap Object , vermeld in het deelvenster Eigenschappen van de grafische en XML-showplans. Het XML-showplan bevat eigenschappen SetPredicate en ColumnReference , die kunnen worden gebruikt om de waarde te bepalen waarop elke kolom is ingesteld. Als Geclusterde index invoegen geen onderliggende elementen heeft voor het invoegen van waarden, wordt de ingevoegde rij opgehaald uit de operator Invoegen zelf.

Notitie: Wijzigingen in geclusterde indexen kunnen van invloed zijn op niet-geclusterde indexen.

Geclusterde index invoegen is een fysieke operator.
Gegroepeerde index samenvoegen De operator Geclusterde index samenvoegen past een samenvoeggegevensstroom toe op een geclusterde index. De operator verwijdert, werkt rijen bij of voegt rijen uit de geclusterde index in die is opgegeven in de eigenschap Object , die wordt vermeld in het deelvenster Eigenschappen van de grafische en XML-showplans. De werkelijke bewerking die wordt uitgevoerd, is afhankelijk van de runtimewaarde van de eigenschap ActionColumn .

Notitie: Wijzigingen in geclusterde indexen kunnen van invloed zijn op niet-geclusterde indexen.

Geclusterde indexsamenvoeging is een fysieke operator.
Geclusterde indexscan De operator Geclusterde indexscan scant de geclusterde index die is opgegeven in de eigenschap Object , vermeld in het deelvenster Eigenschappen van de grafische en XML-showplans. Wanneer een optioneel predicaat aanwezig is, worden alleen de rijen geretourneerd die voldoen aan het predicaat. Als de eigenschap Geordende eigenschap in het deelvenster Eigenschappen of XML-showplan Waar is, heeft de queryprocessor vastgesteld dat de rijen moeten worden geretourneerd in de volgorde waarin de geclusterde index deze heeft gesorteerd. Als de eigenschap Geordendeeigenschap Onwaar is, scant de database-engine de index op de optimale manier, zonder dat de uitvoer hoeft te worden gesorteerd.

Geclusterde indexscan is een logische en fysieke operator.
Geclusterde index zoeken De operator Geclusterd indexzoeken maakt gebruik van de mogelijkheid van indexen om rijen op te halen uit een geclusterde index. De eigenschap Object , die wordt vermeld in het deelvenster Eigenschappen van de grafische en XML-showplans, bevat de naam van de geclusterde index die wordt gebruikt. Het Zoekpredicate bevat het predicaat voor het zoeken. De database-engine gebruikt de index om alleen de rijen te verwerken die voldoen aan het SeekPredicate. Het kan ook een predicaateigenschap bevatten waarbij de database-engine evalueert op alle rijen die voldoen aan het SeekPredicate, maar dit is optioneel en gebruikt geen indexen om dit proces te voltooien.

Als de eigenschap Geordende eigenschap in het deelvenster Eigenschappen of XML-showplan Waar is, heeft de queryprocessor vastgesteld dat de rijen moeten worden geretourneerd in de volgorde waarin de geclusterde index deze heeft gesorteerd. Als de eigenschap Geordendeeigenschap Onwaar is, zoekt de database-engine de index op de optimale manier, zonder dat de uitvoer hoeft te worden gesorteerd. Het vereisen van de uitvoer om de volgorde te behouden, kan minder efficiënt zijn dan het produceren van niet-gesorteerde uitvoer.

Geclusterd indexzoeken is een logische en fysieke operator.
Update van geclusterde index De operator Geclusterde indexupdate werkt invoerrijen bij in de geclusterde index die is opgegeven in de eigenschap Object , die wordt vermeld in het deelvenster Eigenschappen van de grafische en XML-showplans. Als de eigenschap Predicaat aanwezig is, worden alleen de rijen bijgewerkt die aan dit predicaat voldoen. Als de eigenschap SetPredicate aanwezig is, wordt elke bijgewerkte kolom ingesteld op deze waarde. Als de eigenschap DefineValue aanwezig is, worden de waarden die door deze operator worden gedefinieerd weergegeven. Naar deze waarden kan worden verwezen in de SET component of ergens anders binnen deze operator en elders in deze query.

Notitie: Wijzigingen in geclusterde indexen kunnen van invloed zijn op niet-geclusterde indexen.

Geclusterde indexupdate is een logische en fysieke operator.
Instorting De operator Samenvouwen optimaliseert de verwerking van updates. Wanneer een update wordt uitgevoerd, kan deze worden gesplitst (met behulp van de operator Splitsen ) in een verwijder- en invoegbewerking. Het deelvenster Eigenschappen bevat een groep per predicaat waarmee een lijst met sleutelkolommen wordt opgegeven. Als de queryprocessor aangrenzende rijen tegenkomt die dezelfde sleutelwaarden verwijderen en invoegen, worden deze afzonderlijke bewerkingen vervangen door één efficiëntere updatebewerking.

Samenvouwen is een logische en fysieke operator.
Columnstore-index verwijderen De operator Columnstore Index Delete vertegenwoordigt het verwijderen van rijen uit de columnstore-index die is opgegeven in de eigenschap Object , die wordt vermeld in het deelvenster Eigenschappen van de grafische en XML-showplans. Verwijdering vindt plaats via de gegroepeerde index verwijderen voor een geclusterde columnstore-index en via de operator Index verwijderen voor een niet-geclusterde columnstore-index. Het indextype (geclusterd, niet-geclusterd of ViewNonClustered) is opgegeven in de eigenschap IndexKind in het XML-showplan. De SeekPredicate wordt niet ondersteund voor het verwijderen van een Columnstore-index. Rijen die moeten worden verwijderd, worden gelezen uit een onderliggende operator.

Columnstore Index Delete is een fysieke operator.
Columnstore-index invoegen De operator Columnstore Index Insert vertegenwoordigt de invoeging van rijen uit de invoer in de columnstore-index die is opgegeven in de eigenschap Object , die wordt vermeld in het deelvenster Eigenschappen van de grafische en XML-showplans. Invoegen vindt plaats via de geclusterde index invoegen voor een geclusterde columnstore-index en via de operator Index Insert voor een niet-geclusterde columnstore-index. Het indextype (geclusterd, niet-geclusterd of ViewNonClustered) is opgegeven in de eigenschap IndexKind in het XML-showplan. Het XML-showplan bevat eigenschappen SetPredicate en ColumnReference , die kunnen worden gebruikt om de waarde te bepalen waarop elke kolom is ingesteld.

Notitie: Wijzigingen in geclusterde indexen kunnen van invloed zijn op niet-geclusterde indexen.

Columnstore Index Insert is een fysieke operator.
Columnstore-index samenvoegen De columnstore-indexsamenvoeging vertegenwoordigt de toepassing van een samenvoeggegevensstroom met behulp van de operator Voor het samenvoegen van geclusterde indexen . Met de operator worden rijen verwijderd, bijgewerkt of ingevoegd uit de geclusterde columnstore-index die is opgegeven in de eigenschap Object , die wordt vermeld in het deelvenster Eigenschappen van de grafische en XML-showplans. De werkelijke bewerking die wordt uitgevoerd, is afhankelijk van de runtimewaarde van de eigenschap ActionColumn .

Notitie: Wijzigingen in geclusterde indexen kunnen van invloed zijn op niet-geclusterde indexen.

Columnstore Index Merge is een fysieke operator.
Columnstore-indexscan De columnstore-indexscanoperator vertegenwoordigt een scan van de columnstore-index die is opgegeven in de eigenschap Object , die wordt vermeld in het deelvenster Eigenschappen van de grafische en XML-showplans. De scan vindt plaats via de geclusterde indexscan voor een geclusterde columnstore-index en via de operator Indexscan voor een niet-geclusterde columnstore-index. Het indextype (geclusterd, niet-geclusterd of ViewNonClustered) is opgegeven in de eigenschap IndexKind in het XML-showplan. Wanneer een optioneel predicaat aanwezig is, worden alleen de rijen geretourneerd die voldoen aan het predicaat. De eigenschap SeekPredicate is alleen beschikbaar voor een gepartitioneerde columnstore-index en alleen gelijkheids- of ongelijkheidsvoorwaarden. Als de gepartitioneerde kolom zich in het querypredicaat bevindt, kan partitieverwijdering het aantal rijengroepen verminderen dat moet worden gescand.

Columnstore Index Scan is een fysieke operator.
Columnstore-index bijwerken De operator Columnstore Index Update vertegenwoordigt een update naar een of meer rijen in de columnstore-index die is opgegeven in de eigenschap Object , vermeld in het deelvenster Eigenschappen van de grafische en XML-showplans. Updates vinden plaats via de operator Geclusterde indexupdate voor een geclusterde columnstore-index en via de operator Index Update voor een niet-geclusterde columnstore-index. Het indextype (geclusterd, niet-geclusterd of ViewNonClustered) is opgegeven in de eigenschap IndexKind in het XML-showplan. De SeekPredicate wordt niet ondersteund voor een columnstore-indexupdate. Rijen die moeten worden bijgewerkt, worden gelezen vanuit een onderliggende operator. Als de eigenschap SetPredicate aanwezig is, wordt elke bijgewerkte kolom ingesteld op deze waarde. Als de eigenschap DefineValue aanwezig is, worden de waarden die door deze operator worden gedefinieerd weergegeven. Naar deze waarden kan worden verwezen in de SET component of ergens anders binnen deze operator en elders in deze query.

Notitie: Wijzigingen in geclusterde indexen kunnen van invloed zijn op niet-geclusterde indexen.

Columnstore Index Update is een fysieke operator.
Scalar berekenen De operator Scalar compute evalueert een expressie om een berekende scalaire waarde te produceren. Dit kan vervolgens worden geretourneerd aan de gebruiker, waarnaar elders in de query wordt verwezen, of beide. Een voorbeeld van beide is in een filterpredicaat of joinpredicaat.

Compute Scalar-operators die worden weergegeven in showplans die worden gegenereerd door SET STATISTICS XML , bevatten mogelijk niet het Element RunTimeInformation . In grafische voorstellingsplannen zijn werkelijke rijen, werkelijke rebinds en werkelijke terugspoelen mogelijk afwezig in het venster Eigenschappen wanneer de optie Werkelijke uitvoeringsplan opnemen is geselecteerd in SQL Server Management Studio. Wanneer dit gebeurt, betekent dit dat hoewel deze operators zijn gebruikt in het gecompileerde queryplan, hun werk is uitgevoerd door andere operators in het runtime-queryplan. Het aantal uitvoeringen in de showplan-uitvoer die door SET STATISTICS PROFILE wordt gegenereerd, is gelijk aan de som van rebinds en terugspoelen in showplans gegenereerd door SET STATISTICS XML.

Compute Scalar is een logische en fysieke operator.
Aaneenschakeling De samenvoegingsoperator scant meerdere invoerwaarden en retourneert elke gescande rij. Samenvoeging wordt doorgaans gebruikt om de Transact-SQL-constructie UNION ALL te implementeren. De fysieke operator Concatenation heeft twee of meer invoerwaarden en één uitvoer. Samenvoeging kopieert rijen van de eerste invoerstroom naar de uitvoerstroom en herhaalt deze bewerking vervolgens voor elke extra invoerstroom.

Samenvoeging is een logische en fysieke operator.
Voorwaardelijk (If en While) De voorwaardelijke operator voert voorwaardelijke verwerking uit op basis van een IF of WHILE lus. If en While zijn taalelementen.
Constante scan De operator Constante scan introduceert een of meer constante rijen in een query. Een Compute Scalar-operator wordt vaak gebruikt na een constante scan om kolommen toe te voegen aan een rij die wordt geproduceerd door de operator Constante scan . Constante scan kan een of meer rijen genereren met nul of meer kolommen.
Omzetten Met de operator Converteren wordt één scalair gegevenstype geconverteerd naar een ander gegevenstype.

Converteren is een taalelement.
Cross Join De operator Cross Join voegt elke rij van de eerste (bovenste) invoer samen met elke rij van de tweede (onderste) invoer.

Cross Join is een logische operator.
Cursor De logische en fysieke operators van Cursor worden gebruikt om te beschrijven hoe een query of update met cursorbewerkingen wordt uitgevoerd. De fysieke operators beschrijven het algoritme voor fysieke implementatie dat wordt gebruikt om de cursor te verwerken; Bijvoorbeeld met behulp van een sleutelsetgestuurde cursor. Elke stap in de uitvoering van een cursor omvat een fysieke operator. De logische operators beschrijven een eigenschap van de cursor, zoals de cursor is alleen-lezen.

Logische operators omvatten asynchroon, optimistisch, primair, alleen-lezen, schuifvergrendelingen, secundair en synchroon.

Fysieke operators zijn onder andere Dynamisch, Query ophalen, Sleutelset, Populatiequery, Query vernieuwen en Momentopname.
Verklaren De operator Declare wijst een lokale variabele toe in het queryplan.

Declareren is een taalelement.
Verwijderen De operator Verwijderen verwijdert rijen (uit een object) die voldoen aan het optionele predicaat in het deelvenster Eigenschappen .
Verwijderde scan In triggers scant de operator Verwijderde scan de verwijderde tabel.
Geen Duidelijk De operator Distinct verwijdert duplicaten uit een rijenset of uit een verzameling waarden.

Distinct is een logische operator.
Geen Afzonderlijke sortering De logische operator Distinct Sort scant de invoer, verwijdert duplicaten en sorteert op de kolommen die zijn opgegeven in de afzonderlijke volgorde op predicaat van het deelvenster Eigenschappen .

Distinct Sort is een logische operator.
Streams distribueren De operator Streams distribueren wordt alleen gebruikt in parallelle queryplannen. De operator Streams distribueren neemt één invoerstroom van records en produceert meerdere uitvoerstromen. De inhoud en opmaak van de record worden niet gewijzigd. Elke record uit de invoerstroom wordt weergegeven in een van de uitvoerstreams. Deze operator behoudt automatisch de relatieve volgorde van de invoerrecords in de uitvoerstromen. Hashing wordt meestal gebruikt om te bepalen welke uitvoerstroom een bepaalde invoerrecord behoort.

Als de uitvoer is gepartitioneerd, bevat het deelvenster Eigenschappen een predicaat partitiekolommen en de partitioneringskolommen.

Streams distribueren is een logische operator
Dynamisch De dynamische operator maakt gebruik van een cursor die alle wijzigingen van anderen kan zien.
Gretige spool De operator Eager Spool neemt de volledige invoer in beslag, waarbij elke rij wordt opgeslagen in een verborgen tijdelijk object dat is opgeslagen in de tempdb-database. Als de operator opnieuw wordt opgestart (bijvoorbeeld door een operator voor geneste lussen ), maar er geen rebinding nodig is, worden de gepoolde gegevens gebruikt in plaats van de invoer opnieuw te scannen. Als rebinding nodig is, worden de gepoolde gegevens verwijderd en wordt het spoolobject opnieuw opgebouwd door de invoer (rebound) opnieuw te scannen. De operator Eager Spool bouwt het spoolbestand op een 'gretige ' manier: wanneer de bovenliggende operator van de spool om de eerste rij vraagt, verbruikt de spooloperator alle rijen van de invoeroperator en slaat deze op in de spool.

Eager Spool is een logische operator.
Query ophalen De operator Query ophalen haalt rijen op wanneer een fetch wordt uitgegeven op basis van een cursor.
Filteren De filteroperator scant de invoer en retourneert alleen de rijen die voldoen aan de filterexpressie (predicaat) die wordt weergegeven in het deelvenster Eigenschappen .
Geen Flow Distinct De operator Flow Distinct scant de invoer en verwijdert duplicaten. Terwijl de operator Distinct alle invoer verbruikt voordat er uitvoer wordt geproduceerd, retourneert de operator Flow Distinct elke rij zoals deze is verkregen uit de invoer (tenzij die rij een duplicaat is, in dat geval wordt deze verwijderd).

Flow Distinct is een logische operator.
Controle refererende sleutelverwijzingen De operator Referentiële sleutelverwijzingen controleert referentiële integriteit door de gewijzigde rij te vergelijken met de rijen in de verwijzende tabellen om te controleren of de wijziging de referentiële integriteit niet onderbreekt. De operator Refererende sleutelverwijzingen wordt gebruikt wanneer er meer dan 253 refererende sleutelverwijzingen bestaan op dezelfde primaire of unieke sleutel.

Refererende sleutelverwijzingen controleren is een logische en fysieke operator.
Full Outer Join De logische operator Full Outer Join retourneert elke rij die voldoet aan het joinpredicaat van de eerste (bovenste) invoer die is gekoppeld aan elke rij uit de tweede (onderste) invoer. Het retourneert ook rijen van:

- De eerste invoer die geen overeenkomsten had in de tweede invoer.

- De tweede invoer die geen overeenkomsten had in de eerste invoer.

De invoer die niet de overeenkomende waarden bevat, wordt geretourneerd als een null-waarde.

Full Outer Join is een logische operator.
Streams verzamelen De operator Gather Streams wordt alleen gebruikt in parallelle queryplannen. De operator Streams verzamelen verbruikt verschillende invoerstromen en produceert één uitvoerstroom van records door de invoerstromen te combineren. De inhoud en opmaak van de record worden niet gewijzigd. Als deze operator de volgorde behoudt, moeten alle invoerstromen worden geordend. Als de uitvoer is gerangschikt, bevat het deelvenster Eigenschappen een volgorde per predicaat en de namen van kolommen die worden geordend.

Gather Streams is een logische operator.
Hash-overeenkomst De Hash Match-operator bouwt een hash-tabel door voor elke rij een hash-waarde te berekenen op basis van de build-invoer. Een hashpredicaat , met een lijst met kolommen die worden gebruikt om een hash-waarde te maken, wordt weergegeven in het deelvenster Eigenschappen . Vervolgens wordt voor elke testrij (indien van toepassing) een hashwaarde berekend (met dezelfde hash-functie) en wordt in de hash-tabel gezocht naar overeenkomsten. Als er een restpredicaat aanwezig is (aangeduid in RESIDUAL:() het deelvenster Eigenschappen ), moet aan dat predicaat ook worden voldaan om rijen als een overeenkomst te beschouwen. Gedrag is afhankelijk van de logische bewerking die wordt uitgevoerd:

- Voor joins gebruikt u de eerste (bovenste) invoer om de hash-tabel en de tweede (onderste) invoer te bouwen om de hash-tabel te testen. Uitvoerovereenkomsten (of niet-overeenkomende) zoals bepaald door het jointype. Als meerdere joins dezelfde joinkolom gebruiken, worden deze bewerkingen gegroepeerd in een hash-team.

- Voor de afzonderlijke of statistische operators gebruikt u de invoer om de hash-tabel te bouwen (dubbele waarden verwijderen en eventuele statistische expressies te berekenen). Wanneer de hash-tabel is gemaakt, scant u de tabel en voert u alle vermeldingen uit.

- Gebruik voor de samenvoegoperator de eerste invoer om de hash-tabel te maken (dubbele waarden verwijderen). Gebruik de tweede invoer (die geen duplicaten moet hebben) om de hash-tabel te testen, alle rijen te retourneren die geen overeenkomsten hebben, scan de hash-tabel en retourneer alle vermeldingen.

Hash-overeenkomst is een fysieke operator. Zie Hash-joins voor meer informatie.
Index verwijderen De operator Index verwijderen verwijdert rijen uit de niet-geclusterde index die is opgegeven in het deelvenster Eigenschappen .

Index verwijderen is een fysieke operator.
Index invoegen Met de operator Index invoegen worden rijen uit de invoer ingevoegd in de niet-geclusterde index die is opgegeven in het deelvenster Eigenschappen . Het deelvenster Eigenschappen bevat ook een setpredicaat , waarmee de waarde wordt aangegeven waarop elke kolom is ingesteld.

Index Insert is een fysieke operator.
Indexscan De operator Indexscan haalt alle rijen op uit de niet-geclusterde index die is opgegeven in het deelvenster Eigenschappen . Als een optioneel predicaat wordt weergegeven in het deelvenster Eigenschappen , worden alleen de rijen geretourneerd die voldoen aan het predicaat.

Indexscan is een logische en fysieke operator.
Indexzoeken De operator Indexzoeken gebruikt de mogelijkheid van indexen om rijen op te halen uit een niet-geclusterde index. Het deelvenster Eigenschappen bevat de naam van de niet-geclusterde index die wordt gebruikt. Het bevat ook het zoekpredicaat . De database-engine gebruikt de index om alleen de rijen te verwerken die voldoen aan het zoekpredicaat. Het kan eventueel een predicaat bevatten dat door de database-engine wordt geëvalueerd op basis van alle rijen die voldoen aan het zoekpredicaat (hiervoor worden de indexen niet gebruikt). Als het deelvenster Eigenschappen de ORDERED component bevat, heeft de queryprocessor vastgesteld dat de rijen moeten worden geretourneerd in de volgorde waarin de niet-geclusterde index deze heeft gesorteerd. Als de ORDERED component niet aanwezig is, zoekt de database-engine de index op de optimale manier (wat niet garandeert dat de uitvoer wordt gesorteerd). Het is mogelijk dat de uitvoer minder efficiënt is dan het produceren van niet-gesorteerde uitvoer.

Indexzoeken is een logische en fysieke operator.
Index-spool De index-Spool-operator bevat een zoekpredicaat in het deelvenster Eigenschappen . De operator Index Spool scant de invoerrijen, plaatst een kopie van elke rij in een verborgen spoolbestand (opgeslagen in de tempdb-database en bestaat alleen voor de levensduur van de query) en bouwt een niet-geclusterde index op de rijen. Hiermee kunt u de zoekfunctie van indexen gebruiken om alleen de rijen uit te voeren die voldoen aan het zoekpredicaat. Als de operator opnieuw wordt opgestart (bijvoorbeeld door een operator voor geneste lussen ), maar er geen rebinding nodig is, worden de gepoolde gegevens gebruikt in plaats van de invoer opnieuw te scannen.

Index-Spool is een fysieke operator.
Indexupdate De fysieke operator Index Update werkt rijen bij van de invoer in de niet-geclusterde index die is opgegeven in het deelvenster Eigenschappen . Als er een setpredicaat aanwezig is, wordt elke bijgewerkte kolom ingesteld op deze waarde.

IndexUpdate is een fysieke operator.
Inner Join De inner join-operator retourneert elke rij die voldoet aan het joinpredicaat van de eerste (bovenste) invoer met de tweede (onderste) invoer.

Inner Join is een logische operator.
Invoegen Met de operator Invoegen wordt elke rij vanuit de invoer ingevoegd in het object dat is opgegeven in het deelvenster Eigenschappen . De fysieke operator is de operator Table Insert, Index Insert of Clustered Index Insert .

Invoegen is een logische operator.
Ingevoegde scan In triggers scant de operator Ingevoegde scan de ingevoegde tabel.

Ingevoegde scan is een logische en fysieke operator.
Intrinsiek De intrinsieke operator roept een interne Transact-SQL functie aan.

Intrinsiek is een taalelement.
Iterator Het catchall-pictogram van Iterator wordt weergegeven wanneer een geschikt pictogram voor de iterator niet kan worden gevonden door de logica die grafische showplans produceert. Het catchall-pictogram geeft niet noodzakelijkerwijs een foutvoorwaarde aan.
Sleutelzoekactie De sleutelzoekoperator is een bladwijzerzoekactie in een tabel met een geclusterde index. Het deelvenster Eigenschappen bevat de naam van de geclusterde index en de clusteringsleutel die wordt gebruikt om de rij in de geclusterde index op te zoeken. Sleutelzoekactie wordt altijd vergezeld van een operator geneste lussen . Als de WITH PREFETCH component wordt weergegeven in het deelvenster Eigenschappen , heeft de queryprocessor vastgesteld dat het optimaal is om asynchrone prefetching (read-ahead) te gebruiken bij het opzoeken van bladwijzers in de geclusterde index.

Het gebruik van een sleutelzoekoperator in een queryplan geeft aan dat de query kan profiteren van het afstemmen van de prestaties. Queryprestaties kunnen bijvoorbeeld worden verbeterd door een dekkingsindex toe te voegen.
Keyset De keyset-operator maakt gebruik van een cursor die updates kan zien, maar geen invoegingen, gemaakt door anderen.
Taalelement Het catchall-pictogram Language Element wordt weergegeven wanneer een geschikt pictogram voor de iterator niet kan worden gevonden door de logica die grafische showplans produceert. Het catchall-pictogram geeft niet noodzakelijkerwijs een foutvoorwaarde aan.
Luie spool De logische operator Lazy Spool slaat elke rij op uit de invoer ervan in een verborgen tijdelijk object dat is opgeslagen in de tempdb-database. Als de operator opnieuw wordt opgestart (bijvoorbeeld door een operator voor geneste lussen ), maar er geen rebinding nodig is, worden de gepoolde gegevens gebruikt in plaats van de invoer opnieuw te scannen. Als rebinding nodig is, worden de gepoolde gegevens verwijderd en wordt het spoolobject opnieuw opgebouwd door de invoer (rebound) opnieuw te scannen. De operator Lazy Spool bouwt het spoolbestand op een 'luie' manier, dat wil gezegd, telkens wanneer de bovenliggende operator van de spool om een rij vraagt, de spooloperator een rij van de invoeroperator ophaalt en opslaat in de spool, in plaats van alle rijen tegelijk te gebruiken.

Luie Spool is een logische operator.
Geen Links Anti Semi Join De operator Links Anti Semi Join retourneert elke rij van de eerste (bovenste) invoer wanneer er geen overeenkomende rij in de tweede (onderste) invoer staat. Als er geen joinpredicaat bestaat in het deelvenster Eigenschappen , is elke rij een overeenkomende rij.

Linker Anti Semi Join is een logische operator.
Geen Left Outer Join De operator Left Outer Join retourneert elke rij die voldoet aan het joinpredicaat van de eerste (bovenste) invoer met de tweede (onderste) invoer. Het retourneert ook rijen uit de eerste invoer die geen overeenkomende rijen in de tweede invoer hebben. De niet-overeenkomende rijen in de tweede invoer worden geretourneerd als null-waarden. Als er geen joinpredicaat bestaat in het deelvenster Eigenschappen , is elke rij een overeenkomende rij.

Left Outer Join is een logische operator.
Geen Linker semi-join De operator Links Semi Join retourneert elke rij van de eerste (bovenste) invoer wanneer er een overeenkomende rij in de tweede (onderste) invoer staat. Als er geen joinpredicaat bestaat in het deelvenster Eigenschappen , is elke rij een overeenkomende rij.

Left Semi Join is een logische operator.
Logboekrijscan De scanoperator Logboekrij scant het transactielogboek.

Logboekrijscan is een logische en fysieke operator.
Samenvoegingsinterval De operator Interval samenvoegen voegt meerdere (mogelijk overlappende) intervallen samen om minimale, niet-overlappingsintervallen te produceren die vervolgens worden gebruikt om indexvermeldingen te zoeken. Deze operator wordt doorgaans weergegeven vóór een of meer operators van Compute Scalar via operatoren voor constante scan , waarmee de intervallen (weergegeven als kolommen in een rij) worden samengesteld die door deze operator worden samengevoegd.

Samenvoeginterval is een logische en fysieke operator.
Samenvoegen De operator Join samenvoegen voert de inner join, left outer join, left semi join, left anti semi join, right outer join, right semi join, right anti semi join en union logische bewerkingen uit.

In het deelvenster Eigenschappenbevat de samenvoegingsoperator een samenvoegpredicaat als de bewerking een-op-veel-join uitvoert of een veel-op-veel-samenvoegingspredicaat als de bewerking een veel-op-veel-join uitvoert. Het deelvenster Eigenschappen bevat ook een door komma's gescheiden lijst met kolommen die worden gebruikt om de bewerking uit te voeren. De operator Join samenvoegen vereist twee invoer die is gesorteerd op hun respectieve kolommen, mogelijk door expliciete sorteerbewerkingen in het queryplan in te voegen. Samenvoegen is met name effectief als expliciet sorteren niet vereist is, bijvoorbeeld als er een geschikte B-tree-index in de database is of als de sorteervolgorde kan worden gebruikt voor meerdere bewerkingen, zoals samenvoegen en groeperen met samenvouwen.

Merge Join is een fysieke operator. Zie Samenvoegingsdeelnames voor meer informatie.
Geneste lussen De operator Geneste lussen voert de inner join, left outer join, left semi join en left anti semi join logische bewerkingen uit.

Geneste luskoppelingen voeren een zoekopdracht uit op de binnenste tabel voor elke rij van de buitenste tabel, meestal met behulp van een index. De queryprocessor bepaalt, op basis van verwachte kosten, of de buitenste invoer moet worden gesorteerd om de lokaliteit van de zoekopdrachten op de index te verbeteren via de interne invoer. Rijen die voldoen aan het predicaat (optioneel) in het deelvenster Eigenschappen , worden geretourneerd op basis van de logische bewerking die wordt uitgevoerd. Wanneer het OPTIMIZED kenmerk is ingesteld Trueop, betekent dit dat een geoptimaliseerde geneste lussen (of Batch-sortering) wordt gebruikt.

Geneste lussen is een fysieke operator. Zie Understanding Nested Loops joins (Geneste lussen samenvoegen) voor meer informatie.
Geen Online index invoegen De operator Online Index Insert geeft aan dat een indexbewerking (maken, wijzigen of verwijderen) online wordt uitgevoerd. Dat wil gezegd, de onderliggende tabelgegevens blijven beschikbaar voor gebruikers tijdens de indexbewerking.

Online Index Insert is een fysieke operator.
Geen Parallellisme De operator parallellisme (of Exchange Iterator) voert de logische bewerkingen voor distributiestromen uit, verzamel streams en herpartition streams. Het deelvenster Eigenschappen kan een predicaat partitiekolommen bevatten met een door komma's gescheiden lijst van de kolommen die worden gepartitioneerd. Het deelvenster Eigenschappen kan ook een volgorde bevatten op basis van predicaat, waarbij de kolommen worden weergegeven om de sorteervolgorde te behouden voor tijdens het partitioneren.

Notitie: Als een query is gecompileerd als een parallelle query, maar tijdens runtime wordt uitgevoerd als een seriële query, bevat de showplan-uitvoer die wordt gegenereerd door SET STATISTICS XML of met behulp van de optie Werkelijke uitvoeringsplan opnemen in SQL Server Management Studio niet het RunTimeInformation element voor de operator Parallellisme . In SET STATISTICS PROFILE de uitvoer worden in de werkelijke rijaantallen en het werkelijke aantal uitvoeringen nullen weergegeven voor de operator Parallellisme . Wanneer een van beide voorwaarden optreedt, betekent dit dat de operator Parallellisme alleen is gebruikt tijdens het compileren van query's en niet in het runtime-queryplan. Soms worden parallelle queryplannen serieel uitgevoerd als er een hoge gelijktijdige belasting op de server is.

Parallellisme is een fysieke operator. Zie The Parallelism Operator voor meer informatie over de operator Parallellisme.
Scan van parametertabel De operator Parametertabelscan scant een tabel die als parameter in de huidige query fungeert. Dit wordt doorgaans gebruikt voor INSERT query's binnen een opgeslagen procedure.

Parametertabelscan is een logische en fysieke operator.
Geen Gedeeltelijke aggregatie Gedeeltelijke aggregatie wordt gebruikt in parallelle plannen. Er wordt een aggregatiefunctie toegepast op zoveel mogelijk invoerrijen, zodat schrijven naar schijf (ook wel 'overloop' genoemd) niet nodig is. Hash-overeenkomst is de enige fysieke operator (iterator) die gedeeltelijke aggregatie implementeert.

Gedeeltelijk aggregaat is een logische operator.
Populatiequery De operator Populatiequery vult de werktabel van een cursor in wanneer de cursor wordt geopend.
Query vernieuwen De operator Query vernieuwen haalt de huidige gegevens op voor rijen in de ophaalbuffer.
Extern verwijderen De operator Extern verwijderen verwijdert de invoerrijen van een extern object.

Extern verwijderen is een logische en fysieke operator.
Externe indexscan De operator Externe indexscan scant de externe index die is opgegeven in het deelvenster Eigenschappen .

Remote Index Scan is een logische en fysieke operator.
Externe index zoeken De operator Remote Index Seek gebruikt de mogelijkheid van een extern indexobject om rijen op te halen. Het deelvenster Eigenschappen bevat de naam van de externe index die wordt gebruikt en het zoekpredicaat .

Remote Index Seek is een logische en fysieke operator.
Extern invoegen De operator Remote Insert voegt de invoerrijen in een extern object in.

Remote Insert is een logische en fysieke operator.
Externe Query De operator Externe query verzendt een query naar een externe bron. De tekst van de query die naar de externe server is verzonden, wordt weergegeven in het deelvenster Eigenschappen .

Externe query is een logische en fysieke operator.
Externe scan De operator Externe scan scant een extern object. De naam van het externe object wordt weergegeven in het deelvenster Eigenschappen .

Externe scan is een logische en fysieke operator.
Externe update De operator Remote Update werkt de invoerrijen in een extern object bij.

Remote Update is een logische en fysieke operator.
Streams opnieuw partitioneren De operator Repartition Streams (of exchange iterator) verbruikt meerdere streams en produceert meerdere streams van records. De inhoud en opmaak van de record worden niet gewijzigd. Als de queryoptimalisatie een bitmapfilter gebruikt, wordt het aantal rijen in de uitvoerstroom verminderd. Elke record van een invoerstroom wordt in één uitvoerstroom geplaatst. Als deze operator de volgorde behoudt, moeten alle invoerstromen worden geordend en samengevoegd in verschillende geordende uitvoerstromen. Als de uitvoer is gepartitioneerd, bevat het deelvenster Eigenschappen een predicaat partitiekolommen en de partitioneringskolommen. Als de uitvoer is gerangschikt, bevat het deelvenster Eigenschappen een volgorde per predicaat en de kolommen die worden geordend. De operator wordt alleen gebruikt in parallelle queryplannen.

Repartition Streams is een logische operator.
resultaat De operator Resultaat is de gegevens die aan het einde van een queryplan worden geretourneerd. Dit is meestal het hoofdelement van een showplan.

Resultaat is een taalelement.
RID-zoekactie RID Lookup is een bladwijzerzoekactie op een heap met behulp van een opgegeven rij-id (RID). Het deelvenster Eigenschappen bevat het bladwijzerlabel dat wordt gebruikt om de rij in de tabel op te zoeken en de naam van de tabel waarin de rij wordt opgezoekd. RID Lookup wordt altijd vergezeld van een NESTED LOOP JOIN.

RID Lookup is een fysieke operator. Zie Vastgelegde en bladwijzerzoekopdrachten lezen voor meer informatie over opzoekacties voor bladwijzers.
Geen Rechter anti semi-join De rechteroperator Anti Semi Join voert elke rij uit van de tweede (onderste) invoer wanneer er geen overeenkomende rij in de eerste (bovenste) invoer bestaat. Een overeenkomende rij wordt gedefinieerd als een rij die voldoet aan het predicaat in het deelvenster Eigenschappen (als er geen predicaat bestaat, is elke rij een overeenkomende rij).

Right Anti Semi Join is een logische operator.
Geen Right Outer Join De operator Right Outer Join retourneert elke rij die voldoet aan de join van de tweede (onderste) invoer met elke overeenkomende rij van de eerste (bovenste) invoer. Het retourneert ook rijen van de tweede invoer die geen overeenkomende rijen in de eerste invoer hadden, die zijn samengevoegd met NULL. Als er geen joinpredicaat bestaat in het deelvenster Eigenschappen , is elke rij een overeenkomende rij.

Right Outer Join is een logische operator.
Geen Rechter semi-join De operator Semi Join rechts retourneert elke rij uit de tweede (onderste) invoer wanneer er een overeenkomende rij in de eerste (bovenste) invoer staat. Als er geen joinpredicaat bestaat in het deelvenster Eigenschappen , is elke rij een overeenkomende rij.

Right Semi Join is een logische operator.
Rijaantal spools De operator Rijaantal Spool scant de invoer, waarbij wordt geteld hoeveel rijen aanwezig zijn en hetzelfde aantal rijen wordt geretourneerd zonder dat er gegevens in staan. Deze operator wordt gebruikt wanneer het belangrijk is om te controleren op het bestaan van rijen in plaats van de gegevens in de rijen. Als een operator geneste lussen bijvoorbeeld een bewerking voor semi-join links uitvoert en het joinpredicaat van toepassing is op interne invoer, kan een rijtellingspool boven aan de binnenste invoer van de operator Geneste lussen worden geplaatst. Vervolgens kan de operator Geneste lussen bepalen hoeveel rijen worden uitgevoerd door de rijtellingspool (omdat de werkelijke gegevens van de binnenste zijde niet nodig zijn) om te bepalen of de buitenste rij moet worden geretourneerd.

Rijaantal Spool is een fysieke operator.
Geen Segmentherpartitie In een parallel queryplan zijn er soms conceptuele regio's van iterators. Alle iterators binnen een dergelijke regio kunnen worden uitgevoerd door parallelle threads. De regio's zelf moeten serieel worden uitgevoerd. Sommige van de parallellisme-iterators binnen een afzonderlijke regio worden Vertakkingsherpartition genoemd. De parallellisme-iterator aan de grens van twee dergelijke regio's wordt Segmentherpartition genoemd.

Vertakkingsherpartition en segmentherpartition zijn logische operators.
Segment De operator Segment verdeelt de invoerset in segmenten op basis van de waarde van een of meer kolommen. Deze kolommen worden weergegeven als argumenten in de operator Segment . De invoer wordt gesorteerd op deze kolommen. De operator gebruikt de segmentkolom om de eerste rij van elk segment te markeren.

Segment is een fysieke en logische operator.
Reeksproject De operator Reeksproject voegt kolommen toe om berekeningen uit te voeren op een geordende set. Hiervoor moet de invoerset worden verdeeld in segmenten op basis van de waarde van een of meer kolommen.

Sequence Project is een logische en fysieke operator.
Volgorde De sequence-operator stuurt brede updateplannen aan. Functioneel wordt elke invoer op volgorde uitgevoerd (van boven naar beneden). Elke invoer is meestal een update van een ander object. Deze retourneert alleen de rijen die afkomstig zijn van de laatste (onderste) invoer.

Reeks is een logische en fysieke operator.
Momentopname De operator Momentopname maakt een cursor die geen wijzigingen van anderen ziet.
Sort Met de sorteeroperator worden alle binnenkomende rijen gesorteerd. Het deelvenster Eigenschappen bevat een afzonderlijke volgorde per predicaat als duplicaten door deze bewerking worden verwijderd of een volgorde op predicaat met een door komma's gescheiden lijst van de kolommen die worden gesorteerd. De kolommen worden voorafgegaan door de waarde ASC als de kolommen in oplopende volgorde worden gesorteerd of de waarde DESC als de kolommen in aflopende volgorde worden gesorteerd.

Sorteren is een logische en fysieke operator.
Splijten De splitsoperator wordt gebruikt om de verwerking van updates te optimaliseren. Elke updatebewerking wordt gesplitst in een verwijderbewerking en een invoegbewerking.

Splitsen is een logische en fysieke operator.
Spoel De Spool-operator slaat een tussenliggend queryresultaat op in de tempdb-database.
Stream Aggregate De streamaggregatieoperator groepeert rijen op een of meer kolommen en berekent vervolgens een of meer statistische expressies die door de query worden geretourneerd. De uitvoer van deze operator kan worden verwezen door latere operators in de query, geretourneerd naar de client of beide. Voor de operator Stream Aggregate is invoer vereist die is gerangschikt op de kolommen binnen de groepen. De optimalisatiefunctie maakt gebruik van een sorteeroperator vóór deze operator als de gegevens nog niet zijn gesorteerd vanwege een eerdere sorteeroperator , of als gevolg van een geordende indexzoeken of scannen. In de SHOWPLAN_ALL instructie of het grafische uitvoeringsplan in SQL Server Management Studio worden de kolommen in de groep per predicaat weergegeven in het deelvenster Eigenschappen en worden de statistische expressies weergegeven in de kolom Gedefinieerde waarden .

Stream Aggregate is een fysieke operator.
Schakelaar Switch is een speciaal type samenvoegings-iterator met n invoer. Een expressie is gekoppeld aan elke switchoperator . Afhankelijk van de retourwaarde van de expressie (tussen 0 en n-1), kopieert u de juiste invoerstroom naar de uitvoerstroom. Een van de schakeloptie is het implementeren van queryplannen met snelle cursors met bepaalde operatoren zoals de TOP operator.

Switch is een logische en fysieke operator.
Tabel verwijderen De operator Tabel verwijderen verwijdert rijen uit de tabel die is opgegeven in het deelvenster Eigenschappen van het queryuitvoeringsplan.

Tabel verwijderen is een fysieke operator.
Tabel invoegen Met de operator Tabel invoegen worden rijen uit de invoer ingevoegd in de tabel die is opgegeven in het deelvenster Eigenschappen van het queryuitvoeringsplan. Het deelvenster Eigenschappen bevat ook een setpredicaat , waarmee de waarde wordt aangegeven waarop elke kolom is ingesteld. Als Tabel invoegen geen onderliggende elementen heeft voor het invoegen van waarden, wordt de ingevoegde rij opgehaald uit de operator Invoegen zelf.

Tabel invoegen is een fysieke operator.
Tabel samenvoegen Met de operator Tabel samenvoegen wordt een gegevensstroom voor samenvoegen toegepast op een heap. Met de operator worden rijen verwijderd, bijgewerkt of ingevoegd in de tabel die is opgegeven in het deelvenster Eigenschappen van de operator. De werkelijke bewerking die wordt uitgevoerd, is afhankelijk van de runtimewaarde van de eigenschap ActionColumn

Tabel samenvoegen is een fysieke operator.
Tabelscan Met de operator Tabelscan worden alle rijen opgehaald uit de tabel die is opgegeven in het deelvenster Eigenschappen van het queryuitvoeringsplan. Als een where-predicaat wordt weergegeven in het deelvenster Eigenschappen, worden alleen de rijen geretourneerd die voldoen aan het predicaat.

Tabelscan is een logische en fysieke operator.
Tabelpool De tabelpooloperator scant de invoer en plaatst een kopie van elke rij in een verborgen spooltabel die is opgeslagen in de tempdb-database en die alleen bestaat voor de levensduur van de query. Als de operator opnieuw wordt opgestart (bijvoorbeeld door een operator voor geneste lussen ), maar er geen rebinding nodig is, worden de gepoolde gegevens gebruikt in plaats van de invoer opnieuw te scannen.

Table Spool is een fysieke operator.
Tabel bijwerken De operator Tabelupdate werkt invoerrijen bij in de tabel die is opgegeven in het deelvenster Eigenschappen van het queryuitvoeringsplan. Het predicaat van de set bepaalt de waarde van elke bijgewerkte kolom. Naar deze waarden kan worden verwezen in de SET component of ergens anders binnen deze operator, en ergens anders in deze query.

Table Update is een fysieke operator.
Tabelwaarde, functie De operator Functie met tabelwaarde evalueert een tabelwaardefunctie (Transact-SQL of CLR) en slaat de resulterende rijen op in de tempdb-database. Wanneer de bovenliggende iterators de rijen aanvragen, retourneert de tabelwaardefunctie de rijen van tempdb.

Query's met aanroepen naar tabelwaardefuncties genereren queryplannen met de functie-iterator met tabelwaarde . Tabelwaardefunctie kan worden geëvalueerd met verschillende parameterwaarden:

- Functie-XML Reader met tabelwaarde voert een XML-BLOB in als parameter en produceert een rijenset die XML-knooppunten in XML-documentvolgorde vertegenwoordigt. Met andere invoerparameters kunnen XML-knooppunten worden beperkt die worden geretourneerd naar een subset van het XML-document.

- Functie-XML-lezer met tabelwaarde met XPath-filter is een speciaal type tabelwaardefunctie van XML Reader waarmee de uitvoer wordt beperkt tot XML-knooppunten die voldoen aan een XPath-expressie.

De tabelwaardefunctie is een logische en fysieke operator.
Top De operator Top scant de invoer, die alleen het eerste opgegeven aantal of percentage rijen retourneert, mogelijk op basis van een sorteervolgorde. Het deelvenster Eigenschappen kan een lijst bevatten met de kolommen die worden gecontroleerd op bindingen. In updateplannen wordt de operator Top gebruikt om limieten voor het aantal rijen af te dwingen.

Top is een logische en fysieke operator.
Geen Top N sorteren Top N Sort is vergelijkbaar met de sorteer-iterator, behalve dat alleen de eerste N rijen nodig zijn en niet de volledige resultatenset. Voor kleine waarden van N probeert de SQL Server-queryuitvoeringsengine de hele sorteerbewerking in het geheugen uit te voeren. Voor grote waarden van N komt de queryuitvoeringsengine terug op de meer algemene sorteermethode waarvoor N geen parameter is.
UDX Uitgebreide operators (UDX) implementeren een van de vele XQuery- en XPath-bewerkingen in SQL Server.

- Uitgebreide operator (UDX) FOR XML wordt gebruikt voor het serialiseren van de relationele rij die deze invoer in XML-weergave in één BLOB-kolom in één uitvoerrij. Het is een ordergevoelige XML-aggregatieoperator.

- Extended operator (UDX) XML SERIALIZER is een ordergevoelige XML-aggregatieoperator. Het voert rijen in die XML-knooppunten of XQuery-scalaire waarden in XML-documentvolgorde vertegenwoordigen en produceert een geserialiseerde XML-BLOB in één XML-kolom in één uitvoerrij.

- Extended operator (UDX) XML FRAGMENT SERIALIZER is een speciaal type dat wordt gebruikt voor het verwerken van XML SERIALIZER invoerrijen die xml-fragmenten vertegenwoordigen die worden ingevoegd in XQuery insert data modification extension.

- Uitgebreide operator (UDX) XQUERY STRING evalueert de XQuery-tekenreekswaarde van invoerrijen die XML-knooppunten vertegenwoordigen. Het is een aggregatieoperator voor ordergevoelige tekenreeksen. Er wordt één rij uitgevoerd met kolommen die de scalaire XQuery-waarde vertegenwoordigen die de tekenreekswaarde van de invoer bevat.

- Extended operator (UDX) XQUERY LIST DECOMPOSER is een XQuery list decompositie operator. Voor elke invoerrij die een XML-knooppunt vertegenwoordigt, produceert het een of meer rijen die elk XQuery scalaire waarde vertegenwoordigen die een waarde voor een lijstelement bevatten als de invoer van het XSD-lijsttype is.

- Uitgebreide operator (UDX) XQUERY DATA evalueert de XQuery-functie fn:data() op invoer die XML-knooppunten vertegenwoordigt. Het is een aggregatieoperator voor ordergevoelige tekenreeksen. Er wordt één rij uitgevoerd met kolommen die XQuery scalaire waarden vertegenwoordigen die het resultaat van fn:data().

- Uitgebreide operator XQUERY CONTAINS evalueert de XQuery-functie fn:contains() op invoer die XML-knooppunten vertegenwoordigt. Het is een aggregatieoperator voor ordergevoelige tekenreeksen. Er wordt één rij uitgevoerd met kolommen die XQuery scalaire waarden vertegenwoordigen die het resultaat van fn:contains().

- Uitgebreide operator UPDATE XML NODE werkt HET XML-knooppunt in de XQuery-extensie voor het wijzigen van gegevens in de modify() methode op XML-type bij.

UDX-operators zijn zowel logische als fysieke operators.
Unie De operator Union scant meerdere invoer, die elke gescande rij uitvoert en duplicaten verwijdert.

Union is een logische operator.
Update De operator Bijwerken werkt elke rij bij vanuit de invoer in het object dat is opgegeven in het deelvenster Eigenschappen van het queryuitvoeringsplan.

Bijwerken is een logische operator. De fysieke operator is Table Update, Index Update of Clustered Index Update.
Vensterpool De operator Vensterspool breidt elke rij uit naar de set rijen die het venster vertegenwoordigt dat eraan is gekoppeld. In een query definieert de OVER component het venster in een queryresultatenset en berekent een vensterfunctie vervolgens een waarde voor elke rij in het venster.

Window Spool is een logische en fysieke operator.

Opmerking

Documentatie maakt gebruik van de term B-tree in het algemeen in verwijzing naar indexen. In rowstore-indexen implementeert de Database Engine een B+ tree. Dit geldt niet voor columnstore-indexen of indexen voor tabellen die zijn geoptimaliseerd voor geheugen. Zie de SQL Server- en Azure SQL-indexarchitectuur en ontwerphandleidingvoor meer informatie.