Naslaginformatie over logische en fysieke showplanoperatoren

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Operators beschrijven hoe de SQL Server Database Engine een query uitvoert. Query Optimizer maakt gebruik van operators om een queryplan te maken om het resultaat te maken of de bewerking uit te voeren die is opgegeven in de query. Het queryplan is een boomstructuur die bestaat uit fysieke operators. De meest linkse operator is de wortel, die de totale uitvoering aanstuurt. Voor een SELECT instructie retourneert de root doorgaans een resultatenset naar de client. Voor gegevensbewerkingsinstructies (INSERT, UPDATE, DELETE, MERGE) of instructies zoals SELECT...INTO, stuurt de root de wijziging aan en retourneert mogelijk geen rijen. Operators zonder invoer, die zich uiterst rechts van de boomstructuur bevinden, zijn 'leaf'-knooppunten die doorgaans gegevens uit de opslag lezen. Tussenliggende operators transformeren, filteren of voegen gegevens samen wanneer ze van rechts naar links door het plan stromen.

U kunt het queryplan weergeven met behulp van de SET SHOWPLAN instructies, de grafische uitvoeringsplanopties in SQL Server Management Studio of de Showplan-gebeurtenissen bij Uitgebreide Gebeurtenissen.

Operatortypen

Operators worden geclassificeerd als logische en fysieke operators.

Logische operatoren

Logische operators beschrijven de relationele algebraïsche bewerking die wordt gebruikt om een query 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.

Taalelementen

Sommige operators in een queryplan vertegenwoordigen Transact-SQL language-elementen in plaats van relationele bewerkingen. Dit zijn constructies zoals variabeletoewijzing, typeconversie en controlestroom (IF/WHILE). Taalelementen worden niet geclassificeerd als logische of fysieke operators.

Herverbindingen, terugspoelen en einde-van-scans

De volgende meetpunten worden in de showplan-uitvoer weergegeven en helpen u begrijpen hoe vaak een operator opnieuw draait.

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, zijn ActualRebinds gelijk aan één en ActualRewinds gelijk aan nul. Als een operator zich aan de binnenzijde van een loop join bevindt, moet het totale aantal rebinds en rewinds 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 ingevuld voor operators zoals Index Spool, Remote Query, Row Count Spool, Sort, Table Spool en Table valued Function. ActualRebinds en ActualRewinds kunnen ook worden ingevuld voor operators zoals 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 (null) weer voor de werkelijke rebinds en werkelijke rewinds 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 dan of gelijk zijn aan de som van het aantal rebinds en rewinds.

Hoe de Query Optimizer logische en fysieke operators toewijst

Met Query Optimizer wordt een queryplan gemaakt als een boomstructuur die bestaat uit logische operators. Nadat de Query Optimizer het plan heeft gemaakt, wordt voor elke logische operator een fysieke operator gekozen. Query Optimizer maakt gebruik van een kostengebaseerde 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.

Een uitvoeringsplan lezen

In het grafische uitvoeringsplan wijzen pijlen van rechts naar links, die de gegevensstroom vertegenwoordigen. Tijdens runtime werkt dit in omgekeerde richting: operators zijn pull-gebaseerd en doen alleen werk wanneer er om gegevens wordt gevraagd.

De hoofdoperator roept GetRow() aan op zijn onderliggende item, dat op zijn beurt zijn eigen onderliggende items aanroept, totdat een bladknooppunt een rij uit de opslag leest en deze terug omhoog in de keten retourneert. Een geclusterde indexscan onder een topoperator scant bijvoorbeeld niet de hele tabel. De scan stopt zodra Top voldoende rijen heeft. In de batchmodus retourneert elke aanroep een batch rijen in plaats van één rij. Beide leesrichtingen zijn handig: van rechts naar links laat zien welke gegevens elke operator invoeren, terwijl links naar rechts laat zien welke operator het werk aanstuurt.

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 is uitgevoerd. Zie de handleiding thread- en taakarchitectuur voor meer informatie over parallelle uitvoering.

Icon Showplan-operator Description
Adaptieve join Met de operator Adaptive Join wordt de keuze tussen een hash-join of een geneste lussen-joinmethode uitgesteld tot de eerste invoer is gescand.

Adaptive Join is een fysieke operator. Zie Adaptieve joins begrijpen voor meer informatie.
Aggregaat De operator Aggregaat berekent expressies die een of meer statistische functies bevatten.

Aggregaat is een logische operator. Het kan worden geïmplementeerd door de operator Stream Aggregate, Hash Match, Window Aggregate of UserDefinedAggregate (CLR).
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.
Assert 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 is geëvalueerd tot NULL, wordt de rij doorgegeven via de operator Assert, en dan gaat de queryuitvoering door. Indien 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 ouderknooppunt. Normaal gesproken zijn sommige van de clienten afstandscomputers die deelnemen aan een gedistribueerde query. Async Concat roept gelijktijdig Open() aan voor al zijn kinderen 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.

Async Concat is een fysieke operator.
Batch-hashtabel maken De operator Batch Hash Table Build bouwt een batch-hashtabel voor een columnstore-index die is geoptimaliseerd voor geheugen.

Van toepassing op: alleen SQL Server 2012 (11.x).
Bitmap SQL Server maakt gebruik van de bitmapoperator voor het implementeren van bitmapfilters in parallelle queryplannen. Bitmapfilters versnellen de verwerking 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 Parallellisme . 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 Vertakkingsherverdeling In een parallel queryplan zijn er soms conceptuele regio's van iteratoren. Alle iterators binnen een dergelijke regio kunnen worden uitgevoerd op parallelle threads. De regio's zelf moeten in serie uitgevoerd worden. Sommige van de parallelisme-iteratoren van een individuele regio worden Vertakkingsherverdeling genoemd. De parallelisme-iterator aan de grens van twee dergelijke regio's wordt Segmentherverdeling 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.

Broadcast is een logische operator.
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.

Opmerking: De eigenschap Object kan extra niet-geclusterde indexen vermelden die de operator op hetzelfde moment wijzigt als de geclusterde index.

Clustered Index Delete is een fysieke operator.
Geclusterde index invoegen De operator Geclusterde index invoegen voegt rijen uit de invoer toe aan de geclusterde index die is opgegeven in de eigenschap Object, vermeld in het deelvenster Eigenschappen van de grafische en XML-showplannen. 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.

Opmerking: De eigenschap Object kan extra niet-geclusterde indexen vermelden die de operator op hetzelfde moment wijzigt als de geclusterde index.

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 .

Opmerking: De eigenschap Object kan extra niet-geclusterde indexen vermelden die de operator op hetzelfde moment wijzigt als de geclusterde index.

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 Geordende eigenschap in het deelvenster Eigenschappen of XML-showplan True is, heeft de query-processor vastgesteld dat de rijen moeten worden geretourneerd in de volgorde waarin de geclusterde index deze heeft gesorteerd. Als de eigenschap Ordered is False, scant de Database Engine de index zonder de volgorde van de uitvoer te garanderen. De eigenschap SeekPredicate is alleen beschikbaar voor een gepartitioneerde geclusterde index.

Geclusterde indexscan is een logische en fysieke operator.
Clustered Index Seek 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 SeekPredicate bevat de predicate voor de zoekopdracht. 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. De eigenschap Geordende is doorgaans Waar voor deze operator.

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.

Opmerking: De eigenschap Object kan extra niet-geclusterde indexen vermelden die de operator op hetzelfde moment wijzigt als de geclusterde index.

Geclusterde indexupdate is een logische en fysieke operator.
Samenvouwen 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.

Inklappen 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, ViewClustered 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 suboperator.

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, ViewClustered 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.

Columnstore Index Insert is een fysieke operator.
Columnstore-index samenvoegen De Columnstore-indexsamenvoeging vertegenwoordigt de toepassing van een samenvoeging van de gegevensstroom met behulp van de Geclusterde Index Samenvoeging operator. 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. Het indextype (geclusterd, niet-geclusterd, ViewClustered of ViewNonClustered) is opgegeven in de eigenschap IndexKind in het XML-showplan. De werkelijke bewerking die wordt uitgevoerd, is afhankelijk van de runtimewaarde van de eigenschap ActionColumn .

Columnstore Index Merge is een fysieke operator.
Columnstore Index-Scan 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, ViewClustered 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, kunnen partitieverwijdering en verwijdering van rijgroepen 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, ViewClustered 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 operator van een lager niveau. 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.

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 filter-predicaat of join-predicaat.

Compute Scalar-operators die worden weergegeven in showplans die worden gegenereerd door SET STATISTICS XML , bevatten mogelijk niet het Element RunTimeInformation . In grafische voorstellingsplannen kunnen actuele rijen, actuele rebinds en actuele rewinds ontbreken in het venster Eigenschappen wanneer de optie Werkelijk 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 rewinds in showplans gegenereerd door SET STATISTICS XML.

Compute Scalar is een logische en fysieke operator.
Concatenatie 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.

Constante scan is een fysieke operator.
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 bij het uitvoeren van een cursor omvat een fysieke operator. De logische operators beschrijven een eigenschap van de cursor, zoals dat de cursor alleen-lezen is.

Logische operatoren omvatten Asynchroon, Optimistisch, Primair, Alleen-lezen, Scroll Locks, 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 .

Verwijderen is een logische operator.
Verwijderde scan In triggers scant de operator Verwijderde scan de verwijderde tabel.

Verwijderde Scan is een logische en fysieke operator.
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, tenzij het partitioneringstype Broadcast is, in welk geval elke invoerrij op alle uitvoerstreams wordt weergegeven. 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.

Dynamisch is een fysieke operator.
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 Eager Spool operator bouwt het spoolbestand op een 'gretige' manier: wanneer de bovenliggende operator van de spool om de eerste rij vraagt, consumeert de spooloperator alle rijen van de invoeroperator en slaat deze op in de spool.

Eager Spool is een logische operator.
Query ophalen De Fetch Query-operator haalt rijen op wanneer er een fetch wordt uitgevoerd op een cursor.

Fetch Query is een fysieke operator.
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 Foreign Key Verwijzingen De Referentiële sleutelverwijzingencontrole-operator voert op zijn plaats een controle van de referentiële integriteit uit, 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 Foreign Key References Check operator wordt gebruikt wanneer er meer dan 253 verwijzingen naar buitenlandse sleutels bestaan op dezelfde primaire of unieke sleutel.

Controle van verwijzingen naar vreemde sleutels is een logische en fysieke operator.
Volledige Buitenste 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 Match 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 (weergegeven als rest- of testresidu in 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 te bouwen en de tweede (onderste) invoer om de hash-tabel te benaderen. 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 Match is een fysieke operator. Zie voor meer informatie Hash-joins begrijpen.
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 optionele waarvoorwaarde wordt weergegeven in het deelvenster Eigenschappen, worden alleen de rijen geretourneerd die aan de waarvoorwaarde voldoen. Als de eigenschap Ordered de waarde True heeft, worden de rijen geretourneerd in de volgorde waarin de niet-geclusterde index deze heeft gesorteerd. Als de eigenschap Ordered is False, scant de Database Engine de index zonder de volgorde van de uitvoer te garanderen.

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 optioneel 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).

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 index op de rijen. Hiermee kunt u de zoekfunctie van indexen gebruiken om alleen de rijen uit te voeren die voldoen aan het zoekpredicaat.

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.
Interne Samenvoeging 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 een Table Insert, Index Insert of Clustered Index Insert operator.

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

Ingevoegde scan is zowel een logische als een 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 fouttoestand aan.
Sleutelzoekactie De sleutelzoekoperator is een bladwijzerzoekactie in een tabel met een geclusterde index of een geclusterde columnstore-index. Voor een geclusterde index bevat het deelvenster Eigenschappen de naam van de geclusterde index en de clustersleutel die wordt gebruikt om de rij op te zoeken. Voor een geclusterde columnstore-index wordt de ColStoreLoc opgegeven in plaats van de clusteringsleutel. Sleutelzoekactie wordt altijd vergezeld van een Geneste Lussen operator. Als de WITH PREFETCH clausule 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.

Een sleutelzoekactie met een groot aantal uitvoeringen ten opzichte van de tabelgrootte kan profiteren van het toevoegen van een dekkingsindex. Een laag aantal uitvoeringen is doorgaans geen probleem met de prestaties.
Keyset De keyset-operator maakt gebruik van een cursor die updates kan zien, maar geen invoegingen, gemaakt door anderen.

Keyset is een fysieke operator.
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 duidt niet per se op een foutsituatie.
Lazy 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 Lazy Spool operator bouwt zijn spoolbestand op een 'luie' manier, dat betekent dat telkens wanneer de bovenliggende operator van de spool om een rij vraagt, de spooloperator een rij van de invoeroperator neemt en in de spool opslaat, in plaats van alle rijen tegelijk te verwerken.

Lazy Spool is een logische operator.
Geen Linker 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 Linker Buitenste Koppeling 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 Compute Scalar-operators boven Constant Scan-operators, 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, full outer join, concatenation en union logische bewerkingen uit.

In het Eigenschappen deelvenster bevat de Merge Join operator een samenvoegpredicaat als de bewerking een 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 Merge Join-operator vereist twee invoeren die zijn gesorteerd op hun respectieve kolommen, mogelijk door expliciet sorteerbewerkingen in het queryplan in te voeren. 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 lusdeelnames voeren eenmaal de binnenste (onderste) invoer uit voor elke rij van de buitenste (bovenste) invoer. Wanneer de eigenschap Outer References aanwezig is, is de join dynamisch: de vermelde kolomwaarden uit de buitenste rij worden naar de binnenste invoer gepusht, zodat de operators alleen overeenkomende rijen retourneren. De predicaateigenschap wordt in dit geval niet gebruikt. Wanneer Outer References afwezig is, is de join statisch: de binnenste invoer retourneert dezelfde rijen voor elke uitvoering en een predicaat in het deelvenster Eigenschappen bepaalt welke combinaties als overeenkomsten in aanmerking komen.

Wanneer het OPTIMIZED kenmerk is ingesteld op True, herschikt de operator de buitenste gegevens om de I/O-localiteit te verbeteren bij het openen van de binnenste gegevens. Dit wordt ook wel een geoptimaliseerde geneste-lussen-verbinding genoemd.

Geneste lussen is een operator van fysiek type. 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 van distributiestromen, verzamelstromen en herpartitionering van stromen uit. 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 de uitvoer van SET STATISTICS PROFILE worden voor de operator Parallelisme nullen weergegeven bij de werkelijke rijaantallen en het werkelijke aantal uitvoeringen. 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. Voor meer informatie over The Parallelism Operator, zie The Parallelism Operator.
Scan van parameter tabel De scanoperator Parametertabel leest de interne rijenset die tijdens een INSERT ... EXEC instructie wordt geproduceerd. Deze rijset bevat de uitvoer van de uitgevoerde module, zoals een opgeslagen procedure of dynamische SQL-batch, wanneer deze resultaten worden ingevoegd in een tabel, tijdelijke tabel of tabelvariabele.

Parametertabelscan is een logische en fysieke operator.
Geen Gedeeltelijke aggregatie Gedeeltelijke aggregatie wordt doorgaans 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 Match is de enige fysieke operator (iterator) die gedeeltelijke aggregatie implementeert.

Gedeeltelijk aggregaat is een logische operator.
Bevolkingsopvraag De operator Populatiequery vult de werktabel van een cursor in wanneer de cursor wordt geopend.

Populatiequery is een fysieke operator.
Put Met de operator Put worden gegevens ingevoegd in een externe tabel (PolyBase). In tegenstelling tot andere invoegoperators retourneert Put geen rijen naar de bovenliggende operator. In SQL Server 2016 (13.x) tot en met SQL Server 2019 (15.x), is de operator Put gericht op Hadoop en wordt uitgevoerd in de rijmodus. In SQL Server 2022 (16.x) en latere versies is de operator Put gericht op Azure Storage of S3-compatibele opslag en wordt uitgevoerd in de batchmodus. Zie CREATE EXTERNAL TABLE AS SELECT (CETAS) voor meer informatie.

Put is een fysieke operator.

Van toepassing op: SQL Server 2016 (13.x) en latere versies.
Query vernieuwen De operator Vernieuw Query haalt de huidige gegevens op voor rijen in de ophaalbuffer.

Refresh Query is een fysieke operator.
Op afstand verwijderen De operator Extern verwijderen verwijdert de invoerrijen van een extern object.

Extern verwijderen is een logische en fysieke operator.
Externe indexscan op afstand 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 Indexopdracht 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.
Externe invoeging 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 .

Remote Scan is een logische en fysieke bewerking.
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 queryoptimalisatie gebruikmaakt van een bitmapfilter, 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 door een Geneste Lussen operator.

RID Lookup is een fysieke operator. Zie Read Committed en bladwijzeropzoeking voor meer informatie over opzoekacties met 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 (Recht Buitenste 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 Rechtse semi-join operator retourneert elke rij uit de tweede (onderste) invoer wanneer er een overeenkomstige 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.
Rijenaantal Spool 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 Geneste Lussen-operator bijvoorbeeld een linkse semijoinbewerking uitvoert en het joinpredicaat van toepassing is op de interne invoer, kan een rijtellingspool boven aan de binnenste invoer van de Geneste Lussen-operator 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.

Row Count Spool is een fysieke operator.
Geen Segmentherverdeling In een parallel query plan zijn er soms conceptuele regio's van iteratoren. Alle iterators binnen een dergelijke regio kunnen worden uitgevoerd op parallelle threads. De regio's zelf moeten in serie draaien. Sommige van de iteratoren voor parallelisme binnen een individuele regio worden Vertakkingsherverdeling genoemd. De iterator voor parallellisme aan de grens van twee dergelijke regio's wordt Segmentherverdeling 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.
Sequentieproject 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 voert elke invoer in volgorde (van boven naar beneden) uit en retourneert alleen de rijen die afkomstig zijn van de laatste (onderste) invoer. Veelgebruikte toepassingen omvatten uitgebreide updateplannen (waarbij elke invoer doorgaans een update is van een ander object), query's die gebruikmaken van table-valued functies met meerdere instructies, en query's die SHORTEST_PATH op een grafiektabel gebruiken.

Reeks is een logische en fysieke operator.
Momentopname De Momentopname-operator creëert een cursor die geen veranderingen ziet die door anderen zijn aangebracht.

Momentopname is een fysieke operator.
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.
Spool 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. 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) voert Switch de juiste invoer uit en retourneert hij de rijen. Switch wordt gebruikt om queryplannen voor INSERT INTO instructies te implementeren tegen gepartitioneerde weergaven. Het wordt ook gebruikt voor het implementeren van queryplannen met snelle cursors met bepaalde operators 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. De operator verwijdert, werkt bij of voegt rijen in de tabel in 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.
Table Spool 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.
Tabelwaardefunctie 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 om de relationele rijenset die het als invoer krijgt, te serialiseren naar een XML-representatie 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-lijstdecompositie-operator. Voor elke invoerrij die een XML-knooppunt vertegenwoordigt, produceert het een of meer rijen die elk een XQuery-schaalwaarde vertegenwoordigen en een lijstelementwaarde bevatten, indien 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 geproduceerd met kolommen die een XQuery-scalaire waarde vertegenwoordigen die het resultaat van fn:data() bevat.

- 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 geproduceerd met kolommen die de XQuery-schaalwaarde vertegenwoordigen die het resultaat van fn:contains() bevat.

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

UDX-operators zijn zowel logische als fysieke operators.
Unie De operator Union scant meerdere invoeren, voert elke gescande rij uit en verwijdert duplicaten.

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, Clustered Index Update of Columnstore Index Update.
Geen Venster aggregeren De operator Vensteraggregatie evalueert een of meer statistische expressies met een vensterdefinitie en voegt de resultaten toe aan de gegevensstroom.

Window Aggregate is een logische en fysieke operator.
Window-spool 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. De operator slaat alle invoerrijen op in een verborgen werktabel in de tempdb-database of in het geheugen.

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.