Saludos!
La teoria dice que al menos cada tabla deberia tener una llave primaria, que es un campo que puede identificar rapidamente a cualquier registro.
En MySQL hay que especificarlo como PRIMARY KEY, y el motor asume ya que es un indice unico.
Ese campo que indicas 'ID' es candidato a ser la llave primaria. ya que es Auto Incremental es evidente que no va a tener registros repetidos.
Ahora en cuanto a los indices es algo que se debe acomodar de acuerdo a algunas restricciones en los campos. (Por ejemplo si hay alguno que pueda ser unico). Y tambien es algo que se debe acomodar segun las experiencias en las consultas a la Base de Datos.
Es decir si alguna consulta SQL a alguna(s) tabla(s) esta tomando mucho tiempo, entonces si se deben pensar en los Indices.
Por lo general los indices se pueden identificar en las consultas SQL, en las condiciones.
ej:
SELECT A.*, B.*
FROM A, B
WHERE A.id = B.id
AND B.parametro > 2
En esta consulta los candidatos para ser indices son las columnas 'id' y 'parametro'.
Si la columna 'id' es una llave primaria, esta ya es un indice.
Por lo general utilizar indices sobre campos numericos o tipos de datos sencillos.
Piensa en los Indices como en los de una guia telefonica o Directorio Telefonico. Ahi tu encuentras los telefonos más rapido gracias a que hay un indice alfabetico (A-Z)
Pero como te digo solo colocar indices cuando sea algo realmente necesario. Ya que colocar indices innecesarios puede hacer el efecto contrario y hacer más lentas tus consultas.
Te dejo ademas dos grandes Links que te serviran demasiado con MySQL:
Curso MySQL:
http://mysql.conclase.net/curso/index.php
Manual MySQL Español:
http://dev.mysql.com/doc/refman/5.0/es/index.html
Saludos!