Como regla general, los índices deben estar en cualquier campo que use en cláusulas join o where (si tienen suficientes valores diferentes para hacer que valga la pena usar un índice, el campo con solo unos pocos valores posibles no se beneficia un índice por el cual no tiene sentido intentar indexar un campo de bit).
Si su estructura ha creado formalmente claves primarias (lo que debería, nunca creo una tabla sin una clave primaria), estas se indexan por definición porque se requiere una clave primaria para tener un índice único en ella. La gente a menudo olvida que tienen que indexar las claves externas porque no se crea automáticamente un índice cuando configura la relación de la clave externa. Dado que el objetivo de una clave externa es proporcionarle un campo para unirse, la mayoría de las claves externas probablemente deberían estar indexadas.
Los índices una vez creados deben mantenerse. Si tiene una gran cantidad de actividad de cambio de datos, pueden fragmentarse y ralentizar el rendimiento, y deben actualizarse. Lea en libros en línea sobre índices. También puede encontrar la sintaxis para crear la declaración de índice allí.
Los índices son un acto de equilibrio, cada índice que agregue generalmente agregará tiempo a las inserciones, actualizaciones y eliminaciones de datos, pero puede acelerar las selecciones y uniones en inserciones, actualizaciones y eliminaciones complejas. No hay una sola fórmula para cuáles son los mejores índices, aunque la regla general anterior es un buen lugar para comenzar.
@mmattax, debe aceptar una de las respuestas aquí, hay varias realmente buenas –