Cela dépend de ce que vous entendez par "bon" et "mauvais". Fondamentalement, vous devez réaliser que chaque index que vous ajoutez augmentera les performances de toute recherche effectuée par cette colonne (ainsi, l'ajout d'un index à la colonne 'lastname' d'une table person augmentera les performances des requêtes contenant "where lastname =") mais diminuer les performances d'écriture sur l'ensemble de la table.
La raison en est que lorsque vous ajoutez ou mettez à jour une ligne, elle doit ajouter ou mettre à jour à la fois la table elle-même et chaque index dont cette ligne est membre. Donc, si vous avez cinq index sur une table, chaque ajout doit écrire à six endroits - cinq index et la table - et une mise à jour peut toucher jusqu'à six endroits dans le pire des cas.
La création d'index est donc un acte d'équilibre entre la vitesse de requête et la vitesse d'écriture. Dans certains cas, comme un datamart qui n'est chargé de données qu'une fois par semaine dans le cadre d'un travail de nuit mais interrogé des milliers de fois par jour, il est tout à fait logique de surcharger les index et d'accélérer les requêtes autant que possible. Cependant, dans le cas des systèmes de traitement des transactions en ligne, vous devez essayer de trouver un équilibre entre eux.
Donc, en bref, ajoutez des index aux colonnes qui sont beaucoup utilisées dans les requêtes de sélection, mais essayez d'éviter d'en ajouter trop et ajoutez donc les colonnes les plus utilisées en premier.
Après cela, il s'agit de tests de charge pour voir comment les performances réagissent dans des conditions de production, et de nombreux ajustements pour trouver un équilibre acceptable.