Bueno, probablemente puedas llenar libros sobre índices, pero en resumen, aquí hay algunas cosas en las que pensar al crear un índice:
Si bien (principalmente) acelera una selección, ralentiza las inserciones, actualizaciones y eliminaciones porque el motor de la base de datos no tiene que escribir solo los datos, sino también el índice. Un índice necesita espacio en el disco duro (y mucho más importante) en RAM. Un índice que no se puede mantener en la RAM es bastante inútil. Un índice en una columna con solo unos pocos valores diferentes no acelera las selecciones, porque no puede clasificar muchas filas (por ejemplo, una columna "género", que generalmente tiene solo dos valores diferentes:masculino, femenino).
Si usa MySQL, por ejemplo, puede verificar si el motor usa un índice agregando "explicar" antes de seleccionar - para su ejemplo anterior EXPLAIN SELECT TestField FROM Example WHERE username=XXXX