JSON Index Update
Introduction
The JSON Index Update is not really an actual operator. You can encounter it in graphical execution plans in SSMS (and other tools), but if you look at the underlying XML of the execution plan, you will see that it is actually an Index Update (or Clustered Index Update – see below) operator. Front end tools such as SSMS will present it as a JSON Index Update when the IndexKind subproperty in the Object property group is equal to Json.
JSON indexes are implemented as a hidden internal node table, with a clustered index and one or two nonclustered indexes (see here for more details). The JSON Index Update operator can target any one of these. There is nothing in the graphical execution plan, or in the execution plan XML, to distinguish a JSON Index Update that targets the clustered index from one that targets one of the nonclustered indexes.
Visual appearance in execution plans
Depending on the tool being used, an Index Update operator with a target that has its IndexKind property equal to Json is displayed in a graphical execution plan as shown below:
|
SSMS and ADS |
Legacy SSMS |
Plan Explorer |
Paste The Plan |
|
(not supported) |
(shown as Index Update or Clustered Index Update) |
(not supported) |
Algorithm
The JSON Index Update is not a real operator but merely a visual indicator that an Index Update or a Clustered Index Update operator is modifying data in a JSON index. Please check the appropriate pages for a full description of the algorithms of those operators.
Operator properties
The properties below are specific to the JSON Index Update operator, or have a specific meaning when appearing on it. For all other properties, see Common properties. Properties that are included on the Common properties page but are also included below for their specific meaning for the JSON Index Update operator are marked with a *.
(Note that most of these properties are exactly the same as for the Index Update operator; they are repeated here for ease of use).
| Property name | Description |
|---|---|
| ActionColumn | When this property is present, it lists the name of the column from the input that determines for each input row whether it updates existing data, inserts new data in the index, or deletes an existing row from the index. When this property is missing, all input rows are considered to be an update to an existing row. |
| DMLRequestSort | When set to true, the update operation might qualify for minimal logging if additional conditions apply. Details of those additional conditions and the requirements for DMLRequestSort to be true can be found here. |
| Object | The index that the JSON Index Update operator will modify rows in, using four part naming (database, schema, table, index). The subproperties of the Object property represent the four name parts separately, but also include these additional properties:
|
| Partitioned | When this property is present and set to true, the target of the JSON Index Update is a partitioned index. |
| Predicate | Maps columns from the input stream to the columns in the index indicated by the Object property, or sets these columns to hardcoded values or variables from the query text. |
| WithOrderedPrefetch | This property is present (and set to true) when prefetching is requested. This requires the input data to be ordered in the order of the index. Exact details of prefetching in the context of a JSON Index Update operator are unknown at this time. The assumed effect of prefetching is that the operator issues an asynchronous read request to the storage system, so that read-ahead reading can be used to more efficiently find the rows to be deleted. Rows are still processed in the order in which the operator reads them, but they will already be in the buffer pool as a result of the read ahead prefetching. When this property is not present, no prefetching is used. |
Implicit properties
This table below lists the behavior of the implicit properties for the JSON Index Update operator.
| Property name | Description |
|---|---|
| Batch Mode enabled | The JSON Index Update operator supports row mode execution only. |
| Blocking | The JSON Index Update operator is non-blocking. |
| Memory requirement | The JSON Index Update operator does not have any special memory requirement. |
| Order-preserving | The JSON Index Update operator is fully order-preserving. |
| Parallelism aware | The JSON Index Update operator does not support parallelism. It can only be used in a serial plan, or in a serial section of a parallel plan. |
| Segment aware | The JSON Index Update operator is not segment aware. |
Change log
(Does not include minor changes, such as adding, removing, or changing hyperlinks, correcting typos, and rephrasing for clarity).
July 19, 2026: Added.
