Okay, say you have a mass of vertices in memory.
You have loaded in a 3d mesh that has 1000 vertices.
The first 100 you want to texture with a red texture.
The next 400 you want to texture with a blue texture
The last 500 you want to texture with a white texture.
You could sort each vertex by texture and store them in separate vertex buffers, but more commonly you store them in a single vertex buffer.
So when you want to render this object you need a mechanism to render the vertex buffer bit by bit.
bind red texture
render red triangles
bind blue texture
render blue triangles
bind white texture
render white polygons
To allow you to do things like this, all rendering libraries allow you to specify a start index and length with the rendering calls.
They normally also allow for combining meshes into a single vertex buffer for performance, so if you had a single triangle it's indices would obviously be 0,1,2 but if you had already added 100 verts to the buffer you need them to be 100,101,102.
That's all it is, it allows you to lump stuff together so you are not constantly sending vertex buffers across the bus into the graphics card