There is always only one index buffer, but can be multiple vertex buffers. The vertex buffers should match your input layout declaration. It's useful to have multiple vertex buffers as opposed to one. For example, with one vertex buffer, your vertex struct would be something like:
struct Vertex
{
float3 position;
float3 normal;
float2 uv;
};
But with multiple vertex buffers you can instead have one vertex buffer for all the positions, an other for all the normals and the third one for just all the uvs. Imagine you only want to read from positions in the shadow render pass, then you only bind the position vertex buffer. But in the main render pass, you will bind all three vertex buffers. This can help achieve better cache usage and also produces easier to maintain code in my opinion.