Change log

This site has different types of readers. Those that come here to quickly look up something, using it as the reference this is. And those that read everything, or at least the pages they consider interesting, using it as a source of knowledge in addition to books, blogs, conferences, etc.

Especially the second type of reader might want to know when something changed. That’s what this page is for. Here you will find a full log of all changes. Most recent first.

April 14, 2024

New pages:

  • Window Aggregate: New page with the description of the Window Aggregate operator.

Updated pages:

January 16, 2024

New pages:

  • UDX: New page with the description of the UDX operator.

Updated pages:

  • Added links to the UDX page on the Operator List page, and other relevant pages.
  • Aggregate Functions: Added that LAST_VALUE_IGNORE_NULLS was introduced in SQL Server 2022.
  • Switch: Updated with information about input/output mapping and output order after I found an execution plan that uses this operator to return rows with actual data.
  • Table Valued Function: Applied a correction to the description of the [XML Reader with XPath filter] internal table-valued function.

December 12, 2023

New pages:

Updated pages:

December 3, 2023

Updated pages:

November 16, 2023

New pages:

  • Language Element: New page with the description of the Language Element “operator”.

Updated pages:

  • Added links to the Language Element page on the Operator List page, and other relevant pages.
  • Plan properties: Added the StatementType property.
  • Result: Added list of similar “operators” that can appear in an execution plan only (aka estimated execution plan).

November 10, 2023

Updated pages:

  • Aggregate Functions: Added the LAST_VALUE_IGNORE_NULLS function; small clarification for ANY; changed the wording in the “Update functions” column of several functions to be more concise and more consistent; corrected the capitalization of the Count(*) function.
  • Common properties: Added in which version a property was introduced, for appropriate properties.
  • Hash Match: Small correction to the flowchart for the aggregated build phase (a direct result of the correction I made to the text in August 23, 2023); small extra clarification of the actions for Logical Operation Union.
  • Plan properties: Added in which version a property was introduced, for appropriate properties.
  • Scalar Functions: Added description of the remapbits function.
  • Stream Aggregate: Added the Rollup Information property and a description of the additional work for rollup processing (to add subtotals and grand totals); clarified the processing of this operator for aggregation of a framed window (OVER clause with implicit or explicit ROWS or RANGE specification).
  • Table Spool: Added additional explanation about idiosyncrasies of its Actual I/O Statistics property.

November 2, 2023

New pages:

  • Result: New page with the description of the Result (aka SELECT) “operator”.

Updated pages:

  • Added links to the Result page on the Operator List page, and other relevant pages.
  • Adaptive Join: Improved description of the Optimized property and added description of the With Ordered Prefetch and With Unordered Prefetch
  • Table Insert, Table Scan: Added subproperties for the graph worktables that are used in SHORTEST_PATH evaluations.

September 9, 2023

New pages:

Updated pages:

  • Added links to the Batch Hash Table Build page on the Operator List page, and other relevant pages.
  • Adaptive Join, Bitmap, Hash Match: Added clarification of difference between batch-mode bitmaps and row-mode bit-maps, with links to deeper explanation.
  • Sort: Improved flowchart and description of the optimized build phase for Top N Sort.

August 23, 2023

New pages:

  • Switch: New page with the description of the Switch operator.

Updated pages:

  • Added links to the Switch page on the Operator List page, and other relevant pages.
  • Clustered Index Merge: Updated text and flowchart to reflect that certain older versions of SQL Server could include additional nonclustered indexes in the Object property.
  • Hash Match: Found and corrected a severe mistake in the described internals of the Union Logical Operation. Also added additional information on tracking of matches for some Logical Operation. Also added additional information on tracking of matches for some Logical Operations.
  • Sequence: Minor improvements to the description of the Is GraphDB Transitive Closure property, and added a link to a blog post with a very detailed description.
  • Table Merge: Updated text to reflect that only older versions of SQL Server could include additional nonclustered indexes in the Object property.

August 4, 2023

Updated pages:

  • Common properties: Added the Internal Debugging Information property.
  • Merge Join: Extensive rewrite of the page and update of the flowchart, to correct several incorrect assumptions I had originally made on how this operator works.
  • Scalar Functions: Added description of the IsFalseOrUnknown function.
  • Sort: Added a paragraph to clarify that in some cases, reported rewinds are in reality rebinds (thanks, Paul!).

July 17, 2023

New pages:

  • Sort: New page with the description of the Sort operator.

Updated pages:

  • Added links to the Sort page on the Operator List page, and other relevant pages.
  • Sequence: Added a description of the modified behavior of this operator when it has the Is GraphDB Transitive Closure property set.
  • Table Valued Function: Added descriptions for the GENERATE_SERIES, OPENJSON_DEFAULT, and OPENJSON_EXPLICIT internal table-valued functions.
  • Common properties: Corrected a minor typo.
  • Change Log: Corrected several typos.

June 17, 2023

Updated pages:

  • Nested Loops: Corrected a small mistake in the flowchart (a slightly misplaced label – thanks, Yang!), and corrected yet another typo.

June 13 – 16, 2023

Updated pages:

  • Operator List: Replaced the “old” four sets of icons (SSMS 17.4 and up; SSMS until 17.3; Azure Data Studio; and Plan Explorer) with four “new” sets (SSMS and ADS current versions; Legacy SSMS; Plan Explorer; and Paste The Plan). See this blog post for more information.
  • All existing operator pages: Replaced the table with the “old” four icons with the same four “new” ones.
  • Nested Loops: Fixed a link to one of Paul White’s posts, that has been moved after I published this page, and corrected a typo.

June 2, 2023

Updated pages:

June 1, 2023

New pages:

Updated pages:

  • Added links to the Parallelism (Repartition Streams) page on the Operator List page, and other relevant pages.
  • Parallelism (Gather Streams) and Parallelism (Distribute Streams): Added description of the Predicate property in main text and property list and updated flow charts to reflect the logic of the Predicate Fixed an error in the flowchart for the consumer side process. Also fixed a few typos.
  • Scalar Functions: Added description of the PROBE function.
  • Filter: Fixed two confusing mistakes in the list of operator properties.
  • Adaptive Join, Hash Match: Corrected the description of the BitmapCreator property to reflect that they create a bitmap at the end of the build phase rather than during the build phase.

May 22, 2023

Updated pages:

  • Scalar Functions: Added descriptions of the edge_id_from_parts, getgraphidentity, graph_id_from_edge_id, graph_id_from_internal_graph_data, graph_id_from_node_id, internal_graph_from_node_id, node_id_from_parts, object_id_from_edge_id, object_id_from_internal_graph_data, and object_id_from_node_id functions.

May 17, 2023

New pages:

Updated pages:

  • Added links to the Parallelism (Gather Streams) page on the Operator List page, and other relevant pages.
  • Parallelism (Distribute Streams): Fixed an error in one of the flowcharts (Yes and No labels for the “Data available?” test were reversed). Clarified that a wait on the consumer side affects only its own thread and not all threads where this process is running.
  • Plan properties:
    • Added the value 160 (SQL Server 2022) for the CardinalityEstimationModelVersion property (thanks, Yeatsie!).
    • Improved the description of the ContainsInterleavedExecutionCandidates property.
    • Changed “true” and “false” to “True” and “False” to better match how these values are represented in graphical execution plans.
  • Sequence: Added missing hyperlinks to the Table Valued Function page, and improved and clarified the description of its semi-blocking behavior.
  • Table Valued Function: Added an explicit description of a case where the IsInterleavedExecuted property is bugged; also made some other small improvements to the description of this property.

May 2, 2023

New pages:

Updated pages:

  • Added links to the Parallelism (Distribute Streams) page on the Operator List page, and other relevant pages.
  • Changed the table on the Operator List page to have separate entries for the three logical operations of the Parallelism operator.
  • Table Valued Function: Added a description for the PlanarTesselation internal table-valued function.

March 2, 2023

New pages:

Updated pages:

  • Added links to the Table Valued Function page on the Operator List page, and other relevant pages.
  • Constant Scan: Corrected a copy/paste error.
  • Hash Match: Corrected a copy/paste error.
  • Scalar Functions: Added some additional information to the description of the manufacture­construct­ordpath function.

January 21, 2023

Updated pages:

  • Constant Scan: Changed to reflect that a Constant Scan can return zero rows (thanks, Martin!). Also reorganized and rephrased the description of the Values property from the properties table to the main text.

January 21, 2023

New pages:

  • Constant Scan: New page with the description of the Constant Scan operator.

Updated pages:

  • Added links to the Constant Scan page on the Operator List page, and other relevant pages.
  • Scalar Functions: Added the description of the BmkToPage function.

September 10, 2022

New pages:

  • Table Merge: New page with the description of the Table Merge operator.

Updated pages:

  • Added links to the Table Merge page on the Operator List page, and other relevant pages.

July 2, 2022

New pages:

Updated pages:

  • Added links to the Columnstore Index Merge page on the Operator List page, and other relevant pages.

June 5, 2022

New pages:

Updated pages:

  • Added links to the Clustered Index Merge page on the Operator List page, and other relevant pages.
  • Plan properties: Added a link to Taiob Ali’s blog post with details about the subproperties of the MemoryGrantInfo property.
  • Nested Loops: Link to Craig Freedman’s blog post on optimized Nested Loops processing was incorrect, now fixed.

May 12, 2022

New pages:

  • Table Update: New page with the description of the Table Update operator.

Updated pages:

April 26, 2022

New pages:

Updated pages:

  • Added links to the Columnstore Index Update page on the Operator List page, and other relevant pages.
  • Index Seek: Corrected a typo.
  • Scalar Functions: Added the description of the RangePartitionNew function.

April 1, 2022

New pages:

Updated pages:

February 26, 2022

New pages:

  • Index Update: New page with the description of the Index Update operator.

Updated pages:

  • Added link to the Index Update page on the Operator List page.
  • Scalar Functions: Added descriptions for the GetGIFromNID, getidentity, getparent, and GetURIFromNID functions.
  • Common properties: Improved the description of the Actual I/O Statistics property to explicitly clarify that it is not included for operators that read from a memory-optimized index or table.

September 16, 2021

New pages:

  • Table Delete: New page with the description of the Table Delete operator.

Updated pages:

  • Added link to the Table Delete page on the Operator List page, and one other page.

August 28, 2021

New pages:

Updated pages:

August 24, 2021

Updated pages:

  • Clustered Index Delete: Updated to correctly reflect that the actual removal of a row from the clustered index is delayed until the next time the operator is called (thanks, Paul!).

August 16, 2021

New pages:

Updated pages:

  • Added link to the Clustered Index Delete page on the Operator List page.
  • Index Delete: Added link to the Clustered Index Delete page and fixed a minor typo.

July 30, 2021

New pages:

  • Index Delete: New page with the description of the Index Delete operator.

Updated pages:

July 18, 2021

New pages:

  • Table Insert: New page with the description of the Table Insert operator.

Updated pages:

July 10, 2021

New pages:

Updated pages:

June 21, 2021

New pages:

Updated pages:

  • Added link to the Clustered Index Insert page on the Operator List page, and a few other pages.

May 30, 2021

New pages:

  • Index Insert: New page with the description of the Index Insert operator.

Updated pages:

  • Added link to the Index Insert page on the Operator List page.
  • Plan properties: Added the ContainsInterleavedExecutionCandidates property.
  • Columnstore Index Scan, Common Properties, Key Lookup: Added notes about a bug in the interaction of the Actual I/O Statistics property when reading data from columnstore indexes, and about possibly incorrect Actual Number of Rows and Actual Number of Rows for All Executions for a Columnstore Index Scan on a nonclustered columnstore index.

May 9, 2021

New pages:

  • Top: New page with the description of the Top operator.

Updated pages:

April 21, 2021

Updated pages:

April 15, 2021

New pages:

  • Deleted Scan: New page with the description of the Deleted Scan operator.
  • Inserted Scan: New page with the description of the Inserted Scan operator.

Updated pages:

  • Added links to the Deleted Scan and Inserted Scan pages on the Operator List page.
  • Scalar Functions: Added the functions “greatest” and “least” that are currently used on Azure SQL Database only to implement the new GREATEST and LEAST keywords.
  • Improved visual design of tables on all pages.

April 12, 2021

Updated pages:

February 12, 2021

New pages:

  • Sequence: New page with the description of the Sequence operator.

Updated pages:

  • Added link to the Sequence page on the Operator List page, and on a few other pages.

January 16, 2021

New pages:

  • Concatenation: New page with the description of the Concatenation operator.

Updated pages:

  • Added link to the Concatenation page on the Operator List page, and on a few other pages.

January 1, 2021

Updated pages:

  • Row Count Spool: Significant changes to the page after discovering that a Row Count Spool can, in fact, run as either builder or consumer.

December 14, 2020

New pages:

  • Merge Interval: New page with the description of the Merge Interval operator.

Updated pages:

  • Added link to the Merge Interval page on the Operator List and Index Seek pages.
  • Index Seek: Added information about dynamic seek ranges.
  • Scalar Functions: Added link to dynamic seek ranges for function that use the corresponding seek_flags column; moved GetSparseColumnValue to its proper alphabetical location in the list; added RaiseIfNullUpdate function.

December 3, 2020

New pages:

  • Scalar Functions: Moved the list of all built-in functions that are not standard SQL from Compute Scalar to a separate page, since it also applies to many more operators.
    Also added descriptions for APPROX_COUNT_DISTINCT_CONVERT, RaiseIfNullInsert, sysmaxdatetime, and systrandatetime.
  • Aggregate Functions: Moved the list of all aggregate functions from Stream Aggregate to a separate page, since it also applies to Hash Match.
    Also added a description for APPROX_COUNT_DISTINCT_ACCUM.

Updated pages:

November 25, 2020

Updated pages:

  • Nested Loops: Added description of special column Passnnnn in the Output List property.
  • Merge Join: Added extra details on the probed Left Semi Join description; added description of pass-through operation for this operator.

November 19, 2020

New pages:

  • Filter: New page with the description of the Filter operator.

Updated pages:

  • Added link to the Filter page on the Operator List page, and on a few other pages.

November 18, 2020

Updated pages:

  • Index Spool, Table Spool, Window Spool: Corrected wrong information about behavior of these operators in parallel execution plans.
  • Stream Aggregate, Window Spool: Improved description of the interaction of these two operators for windowed aggregate; corrected wrong information about behavior of these operators for windowed aggregates with a RANGE specification.
  • Hash Match: Removed wrong information and added corrected description of the Partial Aggregate logical operation. (Thanks, Paul!)
  • Plan properties: Added descriptions for properties BatchModeOnRowStore, PlanGuideDB, PlanGuideName, and Use plan.

October 25, 2020

New pages:

  • Sequence Project: New page with the description of the Sequence Project operator.

Updated pages:

  • Added link to the Sequence Project page on the Operator List page, and on a few other pages.
  • Segment: Replaced speculation on data type and values used for the Segment column with the actual data type and values used.

October 5, 2020

New pages:

  • Window Spool: New page with the description of the Window Spool operator.

Updated pages:

  • Added link to the Window Spool page on the Operator List page, and on a few other pages.
  • Compute Scalar: Added a description for the built-in function “ForceOrder”.
  • Collapse: Corrected a minor typo.
  • Nested Loops and Split: Reuploaded flowcharts that were cut off at the edges. (No actual changes).

September 20, 2020

Updated pages:

  • Segment: Added a note about the possibility of an empty Group By
  • Stream Aggregate: Added description of the special behavior when used in combination with a Window Spool operator; added information about how the ANY aggregate function works.
  • Table Scan: Added information on Table Scan on a memory-optimized table.
  • Table Scan, Index Scan, Clustered Index Scan, and Columnstore Index Scan: Added the Seek Predicates property, that can be used on these operators if the object scanned is partitioned.
  • Index Scan and Clustered Index Scan: Added a warning about potentially incorrect information in the Number of Rows Read property when a PROBE Predicate is used.

August 20, 2020

Updated pages:

  • Common Properties: Correction and textual clarification in description of the Memory Usage

August 19, 2020

Updated pages:

  • Common Properties: Correction and textual clarification in description of the Memory Fractions

August 17, 2020

New pages:

  • Row Count Spool: New page with the description of the Row Count Spool operator.

Updated pages:

July 18, 2020

Updated pages:

  • Compute Scalar: Added remarks about its fixed cost estimates to the list of Operator Properties.

July 17, 2020

New pages:

  • Compute Scalar: New page with the description of the Compute Scalar operator.

Updated pages:

  • Added link to the Compute Scalar page on the Operator List page.
  • Common Properties: Added pointer to Compute Scalar for the generic description of functions in the Defined Values

June 20, 2020

Updated pages:

  • Common Properties: Added lots of detail and better explanation for a variety of properties.
  • All operator pages:
    • Switched order of old and new SSMS icon; and added Plan Explorer icon on operator page that didn’t have it yet.
    • Added a marker to properties that are also discussed on the Common Properties page.
    • Clarified wording and fixed typos for several properties.
  • Hash Match: Added extra information on Estimated CPU Cost and Estimated I/O Cost
  • Nested Loops: Added extra details to the description of the prefetching process.

June 15, 2020

New pages:

  • Table Scan: New page with the description of the Table Scan operator.

Updated pages:

  • Added link to the Table Scan page on the Operator List page.
  • Fixed small typos and language errors in the property list on several pages.

May 20, 2020

New pages:

  • RID Lookup: New page with the description of the RID Lookup operator.

Updated pages:

  • Key Lookup: Added description of unexpected behavior of Estimated Number of Rows, Estimated Number of Rows Per Execution, and Estimated Number of Rows for All Execution properties when a Predicate property is present and corrected the description of the Forced Index
  • Added link to the RID Lookup page on the Operator List page, and on a few other pages.

April 21, 2020

Updated pages:

  • Plan properties: Added two new sub-properties of the MemoryGrantInfo property, both related to Memory Grant Feedback; added a link to a list of documented values for the NonParallelPlanReason property, and corrected a typo.

April 19, 2020

New pages:

  • Key Lookup: New page with the description of the Key Lookup operator.

Updated pages:

  • Index Seek: Corrected a minor copy/paste error.
  • Added link to the Key Lookup page on the Operator List page, and on a few other pages.

April 12, 2020

Updated pages:

  • Generic information: Rewrote a large part of the page and made several small changes, to use proposed new terminology for execution plans instead of the confusing old terminology; also added a note about improved handling of overly long property values in the popup window on newer versions of Management Studio.
  • Multiple pages: Changed to use proposed new terminology for execution plans instead of the confusing old terminology. Also made some minor other changes on those pages.
  • Columnstore Index Scan: Removed Number of Rows Read from the property list; it was there in error, this operator doesn’t have this property. Also changed the description of the Predicate property to not refer to Number of Rows Read.
  • Plan Properties: Added descriptions for the sub-properties of the QueryTimeStats property; added new information for the RetrievedFronCache property; fixed some formatting issues.

April 9, 2020

Updated pages:

  • Common Properties: Updated with the improvements in how Management Studio 18.5 displays actual and estimated row count. Also added Estimated Data Size (that I had overlooked before).

July 12, 2019

New pages:

Updated pages:

  • Index Scan: Added reference to Clustered Index Scan in opening text to prevent possible misunderstandings (thanks, Nico!).
  • Index Seek: Added the Seek Predicates property to the table of properties; corrected a mistake in the flowchart (thanks, Josh!); corrected a typo (thanks, Nicky!); corrected the spelling of a property in the main text.
  • Added link to the Clustered Index Seek page on the Operator List page, and on a few other pages.

July 8, 2019

New pages:

  • Index Seek: New page with the description of the Index Seek operator.

Updated pages:

  • Index Scan: Added some additional details about Actual Rows Read property, and added the Scan Direction property that I had previously forgotten.
  • Added link to the Index Seek page on the Operator List page, and links to both Index Seek and Index Scan on the Common Properties page.

June 10, 2019

New pages:

Updated pages:

  • Index Scan: Added note about columnstore and memory-optimized indexes in discussion of Parallel Page Supplier, added note about rowgroup elimination in description of Predicate
  • Clustered Index Scan: Added note about rowgroup elimination in description of Predicate property, corrected reference to Parallel Page Supplier in description of Parallelism aware implicit property.
  • Added link to the Columnstore Index Scan page on the Operator List page, and on the Index Scan and Clustered Index Scan pages.

June 9, 2019

New pages:

Updated pages:

  • Index Scan: Added handling of deltastore rowgroups to description of columnstore index scan behavior; added description of memory-optimized nonclustered hash index scan behavior; and fixed a few minor issues.
  • Added link to the Clustered Index Scan page on the Operator List page (and a few other pages).

June 2, 2019

New pages:

  • Index Scan: New page with the description of the Index Scan operator.

Updated pages:

March 18, 2019

New pages:

  • Collapse: New page with the description of the Collapse operator.

Updated pages:

  • Split: Huge rewrite after I found out that there is not always an action column in the input. I thought it needed this action column to determine how to treat each row, now I have removed that theory and replaced it with a few alternatives.
  • Added link to the Collapse page on the Operator List and Split pages.

February 21, 2019

Updated pages:

  • Added link to the Split page on the Operator List page (I apparently forgot to save this change when I first made it on February 20).

February 20, 2019

New pages:

  • Split: New page with the description of the Split operator.

Updated pages:

February 10, 2019

Updated pages:

  • Hash Match: Added some additional information on whether the build phase runs during Init() processing or during the GetNext() processing (thanks, Martin).
    Also fixed a minor copy/paste error in a subheading.

February 5, 2019

Updated pages:

  • Operator List: Added a column for the new icons as used in Plan Explorer (thanks, Aaron).
  • Assert: Fixed a mistake in the flowchart, and a copy/paste error in the text (thanks, Thierry).

February 2, 2019

Updated pages:

  • Plan Properties: Added a description for the “SecurityPolicyApplied” property. Thanks to Kendra Little for blogging about this, and to Thierry van Durme for sending me the link to that post!

January 31, 2019

Updated pages:

  • Index Spool: Added a description of the “limited parallelism awareness” of this operator, and made two minor single-word changes. Thanks to Erik Darling for sharing the execution plan that made me discover this!

January 14, 2019

Updated pages:

January 3, 2019

New pages:

  • Adaptive Join: New page with the description of the Adaptive Join operator.

Updated pages:

  • Added link to the Adaptive Join page on the Operator List page (and a few other pages).
  • Hash Match: Corrected a mistake in the list of implicit properties (two join types were erroneously listed as order-preserving).

December 21, 2018

New pages:

  • Bitmap: New page with the description of the Bitmap operator.

Updated pages:

November 18, 2018

New pages:

  • Index Spool: New page with the description of the Index Spool operator.

Updated pages:

  • Added link to the Index Spool page on the Operator List page (and a few other pages).
  • Table Spool: Correction to the “Order-preserving” property. Also fixed a few typos.
  • Added or corrected links to other pages on several pages.

November 15, 2018

Updated pages:

  • Table Spool: Small correction to the flowchart in the “Actual Logic” section.

November 13, 2018

Updated pages:

  • Table Spool: Corrected the links for the “operator properties” and “implicit properties” tables (thanks, Jan!).

November 11, 2018

Updated pages:

  • Updated the Common properties and Plan properties pages with properties found in the last Cumulative Update of SQL Server. (SQL Server 2017, CU12). Some of these are new, others I had originally overlooked.

November 7, 2018

New pages:

  • Table Spool: New page with the description of the Table Spool operator.

Updated pages:

  • Added link to the Table Spool page on the Operator List page (and a few other pages).

October 27, 2018

Changed the RSS feed to include all pages on this site instead of only the blog posts.

September 24, 2018

Updated pages:

September 10, 2018

Updated pages:

  • Home page: Replaced link to Grant Fritchey’s execution plans book to reference the third edition.

July 30, 2018

New pages:

  • Assert: New page with the description of the Assert operator.

Updated pages:

June 27, 2018

New pages:

  • Segment: New page with the description of the Segment operator.

Updated pages:

  • Added link to the Segment page on various other pages.

June 4, 2018

New pages:

  • Plan properties: Formerly a section on the generic information page, now a page of its own.

Updated pages:

Navigation:

  • Added menu with direct access to relevant pages (thanks, Joshua!)

June 2, 2018

New pages:

Updated pages:

  • Generic information: Fixed a copy/paste error (thanks, Richard!); added additional information to plan property RetrievedFromCache; added plan properties StatementParameterizationType and StatementSqlHandle.
  • Homepage: Added link to change log.

May 31, 2018

New pages:

 

 

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close