OK think in the realms of the game scene is made up of layers. Each zPosition gives reference to a node belonging to a layer. (The reason the property is called zPosition is because its the nodes position along the zAxis)

If you had a gameScene with 4 SKSpriteNodes and gave the nodes zPositions as shown above then the system interprets your intent to be like in the diagram above. When rendering the system will have a draw count of 4. In draw count 1, all nodes with zPosition 1 will be rendered. In draw count 2, all nodes with a zPosition of 2 will be rendered and so on. This is know as the Painters Algorithm. It's like a painter paints.
Now say in our game scene we want to add another SKSpriteNode to node 3. If we add it as a child to node 3 then this is where
var ignoresSiblingOrder: Bool { get set }
comes into play. If set to false then our new node would be rendered after the parent node3. so it would have a zPosition of say 3.5. Our draw count has now increased to 5. If set to true the system will ignore the child/parent relationship our draw count will drop to back to 4 again, but there is no guarantee what the system will render first. node 3 or our new Node. This is result is non-deterministic meaning it will not return the same results. Sometimes node3 will be rendered on top of its child node. Other times the child node will be rendered on top of the Parent node.
A final and really important point is that zPosition is only taken into account by the system when overlap occurs between two nodes.
A good way to optimise is to where possible make single textures. If there is no need to have separate nodes then don't! create a single texture and use that.
This is Key and probably the most important point. If possible avoid node overlap. zPosition is only taken into account during node overlay. If you have 1000 nodes all with different zPositions, but none of them overlap guess what.... you have a draw count of 1.
If node overlay can't be avoided and mostly it can't in some instances. Set ignoreSiblingOrder to true. (You don't really need to do this but it makes things simpler and allows you to specify the draw cycles) Ensure you set zPositions for all nodes. But KEY remember each time you create a new zPosition you are increasing you draw count by 1 as long as that node intersects with another.
Hope this helps