Whenever you create a mesh there will always be shared vertices. More often that not, creating indices to eliminate those shared vertices will give you a performance boost, especially on large terrain.
However, there are cases in which using indices can create a negative effect on performance. Think about 5 triangles that never share a vertex. Without indices you would have to use 15 vertices. Using indices you have define 15 vertices because they are all unique, and what's more is that you still have to define 15 indices, each referencing it's own vertex. Sending those extra bytes to the graphics card will down your game.
But there's a time saving trick to help you figure out which is better to use. Take the number of unique vertices you have and divide it by the number of triangles. If no vertices are shared among the triangles the value should be 3. The more vertices that can be shared, the smaller your number will be. And the lower the number, the more performance you will gain by using indices.
For example:
Take this 4 faced (8 triangles) mesh, with it's inner edges forming a diamond. If you weren't to use indices, you would have 24 vertices (8 triangles * 3 vertices per triangle). If you used indices, you would only have 9 unique vertices saving you 15 vertices in memory, bandwidth and vertex processing power.
The math? 9 Unique Vertices / 8 Triangles = 1.125 (A great performance gain!)
I know the majority of you use DBP here, but I'd still highly recommend picking up the book XNA 3.0 Game Programming Recipes on Amazon for a good price. The information in there has been invaluable to me and can translate over to DBP pretty well (XNA is C#... not that hard to read). Anyway, that's where I picked up this great tip. Hope you enjoyed it!
"If I have seen a little further it is by standing on the shoulders of Giants" - Isaac Newton
Current Project:
http://strewnfield.wordpress.com/ (Last updated 06/11/09)