The artifacts are happening because the resolution of your depth buffer. The near and far values are not only clipping values but also set the resolution of the depth buffer.
Think of the depth buffer as an encoded image, where instead of storing color in RGB you are storing a depth value in the memory. Each fragment in the buffer will have a range from near to far. There are only a set number of steps in that range. If the near and far are too far apart, say near is .01 and far is 10000.0, the steps will be larger (unit wise). If the near and far are closer together, say 1.0 and 100.0, the steps will be smaller (unit wise). So to increase the resolution of the steps and to get more differentiation between objects rendered at different depths, decrease the range between near and far.
Side note - In reality this is a little bit misleading. Because the projection matrix will convert the depth to a range of -1 to +1. So the actual range in clip space is always the same of -1 to +1. And the precision of how many steps there are and if those steps are linear or logarithmic... let's just say I don't know that.
But practically speaking, there is a limit to the number of steps. So reducing the range between the near and far values will make more use of those steps by lowering the amount between one step and the next.
In the scene above if your focus is on the water and that is 100 units away from camera, maybe you don't need the near to be any closer than 50 away from camera. And if you can't see beyond the ground maybe you don't need the far to be farther away that 150. Of course it depends on your whole scene.
In one of my games to gain depth buffer resolution I take the focus point (my main space ship) and I set the near to -125 and the far to +125, clipping the near at 1.0.
And Stephane's answer sounds like a good way of handling it if you need more depth range than what you can get from the built in depth buffer.