The execution statistics associated with the node, contained in a group of
key-value pairs. Only present if the plan was returned as a result of a
profile query. For example, number of executions, number of rows/time per
execution etc.
Used to determine the type of node. May be needed for visualizing
different kinds of nodes differently. For example, If the node is a
[SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation
which can be used to directly embed a description of the node in its
parent.
Attributes relevant to the node contained in a group of key-value pairs.
For example, a Parameter Reference node could have the following
information in its metadata:
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-07 UTC."],[[["\u003cp\u003eThe latest version available for the Google Cloud Spanner v1 API class PlanNode is 5.0.0-beta05, and there are several previous versions accessible, ranging down to version 3.5.0.\u003c/p\u003e\n"],["\u003cp\u003eThe PlanNode class is part of the Google.Cloud.Spanner.V1 namespace, and it implements multiple interfaces, including IMessage, IEquatable, IDeepCloneable, and IBufferMessage.\u003c/p\u003e\n"],["\u003cp\u003ePlanNode provides information about nodes within a QueryPlan, including their index, kind, display name, metadata, execution statistics, and child links.\u003c/p\u003e\n"],["\u003cp\u003eThe class offers constructors to create a new PlanNode instance, either as an empty instance or as a copy of another PlanNode, along with properties such as ChildLinks, DisplayName, and ExecutionStats, which are utilized to describe the node.\u003c/p\u003e\n"],["\u003cp\u003eIt can implement and return information regarding the node's kind, metadata and the short representation when applicable.\u003c/p\u003e\n"]]],[],null,["# Google Cloud Spanner v1 API - Class PlanNode (5.1.0)\n\nVersion latestkeyboard_arrow_down\n\n- [5.1.0 (latest)](/dotnet/docs/reference/Google.Cloud.Spanner.V1/latest/Google.Cloud.Spanner.V1.PlanNode)\n- [5.0.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/5.0.0/Google.Cloud.Spanner.V1.PlanNode)\n- [4.6.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/4.6.0/Google.Cloud.Spanner.V1.PlanNode)\n- [4.5.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/4.5.0/Google.Cloud.Spanner.V1.PlanNode)\n- [4.4.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/4.4.0/Google.Cloud.Spanner.V1.PlanNode)\n- [4.3.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/4.3.0/Google.Cloud.Spanner.V1.PlanNode)\n- [4.2.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/4.2.0/Google.Cloud.Spanner.V1.PlanNode)\n- [4.1.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/4.1.0/Google.Cloud.Spanner.V1.PlanNode)\n- [4.0.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/4.0.0/Google.Cloud.Spanner.V1.PlanNode)\n- [3.15.1](/dotnet/docs/reference/Google.Cloud.Spanner.V1/3.15.1/Google.Cloud.Spanner.V1.PlanNode)\n- [3.14.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/3.14.0/Google.Cloud.Spanner.V1.PlanNode)\n- [3.13.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/3.13.0/Google.Cloud.Spanner.V1.PlanNode)\n- [3.12.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/3.12.0/Google.Cloud.Spanner.V1.PlanNode)\n- [3.11.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/3.11.0/Google.Cloud.Spanner.V1.PlanNode)\n- [3.10.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/3.10.0/Google.Cloud.Spanner.V1.PlanNode)\n- [3.9.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/3.9.0/Google.Cloud.Spanner.V1.PlanNode)\n- [3.8.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/3.8.0/Google.Cloud.Spanner.V1.PlanNode)\n- [3.7.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/3.7.0/Google.Cloud.Spanner.V1.PlanNode)\n- [3.6.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/3.6.0/Google.Cloud.Spanner.V1.PlanNode)\n- [3.5.0](/dotnet/docs/reference/Google.Cloud.Spanner.V1/3.5.0/Google.Cloud.Spanner.V1.PlanNode) \n\n public sealed class PlanNode : IMessage\u003cPlanNode\u003e, IEquatable\u003cPlanNode\u003e, IDeepCloneable\u003cPlanNode\u003e, IBufferMessage, IMessage\n\nReference documentation and code samples for the Google Cloud Spanner v1 API class PlanNode.\n\nNode information for nodes appearing in a \\[QueryPlan.plan_nodes\\]\\[google.spanner.v1.QueryPlan.plan_nodes\\]. \n\nInheritance\n-----------\n\n[object](https://learn.microsoft.com/dotnet/api/system.object) \\\u003e PlanNode \n\nImplements\n----------\n\n[IMessage](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage-1.html)[PlanNode](/dotnet/docs/reference/Google.Cloud.Spanner.V1/latest/Google.Cloud.Spanner.V1.PlanNode), [IEquatable](https://learn.microsoft.com/dotnet/api/system.iequatable-1)[PlanNode](/dotnet/docs/reference/Google.Cloud.Spanner.V1/latest/Google.Cloud.Spanner.V1.PlanNode), [IDeepCloneable](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IDeepCloneable-1.html)[PlanNode](/dotnet/docs/reference/Google.Cloud.Spanner.V1/latest/Google.Cloud.Spanner.V1.PlanNode), [IBufferMessage](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IBufferMessage.html), [IMessage](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage.html) \n\nInherited Members\n-----------------\n\n[object.GetHashCode()](https://learn.microsoft.com/dotnet/api/system.object.gethashcode) \n[object.GetType()](https://learn.microsoft.com/dotnet/api/system.object.gettype) \n[object.ToString()](https://learn.microsoft.com/dotnet/api/system.object.tostring)\n\nNamespace\n---------\n\n[Google.Cloud.Spanner.V1](/dotnet/docs/reference/Google.Cloud.Spanner.V1/latest/Google.Cloud.Spanner.V1)\n\nAssembly\n--------\n\nGoogle.Cloud.Spanner.V1.dll\n\nConstructors\n------------\n\n### PlanNode()\n\n public PlanNode()\n\n### PlanNode(PlanNode)\n\n public PlanNode(PlanNode other)\n\nProperties\n----------\n\n### ChildLinks\n\n public RepeatedField\u003cPlanNode.Types.ChildLink\u003e ChildLinks { get; }\n\nList of child node `index`es and their relationship to this parent.\n\n### DisplayName\n\n public string DisplayName { get; set; }\n\nThe display name for the node.\n\n### ExecutionStats\n\n public Struct ExecutionStats { get; set; }\n\nThe execution statistics associated with the node, contained in a group of\nkey-value pairs. Only present if the plan was returned as a result of a\nprofile query. For example, number of executions, number of rows/time per\nexecution etc.\n\n### Index\n\n public int Index { get; set; }\n\nThe `PlanNode`'s index in \\[node list\\]\\[google.spanner.v1.QueryPlan.plan_nodes\\].\n\n### Kind\n\n public PlanNode.Types.Kind Kind { get; set; }\n\nUsed to determine the type of node. May be needed for visualizing\ndifferent kinds of nodes differently. For example, If the node is a\n\\[SCALAR\\]\\[google.spanner.v1.PlanNode.Kind.SCALAR\\] node, it will have a condensed representation\nwhich can be used to directly embed a description of the node in its\nparent.\n\n### Metadata\n\n public Struct Metadata { get; set; }\n\nAttributes relevant to the node contained in a group of key-value pairs.\nFor example, a Parameter Reference node could have the following\ninformation in its metadata: \n\n {\n \"parameter_reference\": \"param1\",\n \"parameter_type\": \"array\"\n }\n\n### ShortRepresentation\n\n public PlanNode.Types.ShortRepresentation ShortRepresentation { get; set; }\n\nCondensed representation for \\[SCALAR\\]\\[google.spanner.v1.PlanNode.Kind.SCALAR\\] nodes."]]