To zależy od tego, co rozumiesz przez „dobry” i „zły”. Zasadniczo musisz zdać sobie sprawę, że każdy dodany indeks zwiększy wydajność dowolnego wyszukiwania według tej kolumny (więc dodanie indeksu do kolumny „nazwisko” tabeli osoby zwiększy wydajność w zapytaniach, które mają w sobie „gdzie nazwisko =”), ale zmniejszyć wydajność zapisu w całej tabeli.
Powodem tego jest to, że gdy dodajesz lub aktualizujesz wiersz, musi on dodawać lub aktualizować zarówno samą tabelę, jak i każdy indeks, którego członkiem jest wiersz. Więc jeśli masz pięć indeksów w tabeli, każde dodanie musi być zapisane w sześciu miejscach – pięciu indeksach i tabeli – aw najgorszym przypadku aktualizacja może sięgać do sześciu miejsc.
Tworzenie indeksu jest więc działaniem równoważącym między szybkością zapytań a szybkością zapisu. W niektórych przypadkach, na przykład w datamarcie, który jest ładowany danymi tylko raz w tygodniu w ramach nocnego zadania, ale odpytywany jest tysiące razy dziennie, bardzo sensowne jest przeciążenie indeksami i maksymalne przyspieszenie zapytań. Jednak w przypadku systemów przetwarzania transakcji online chcesz spróbować znaleźć równowagę między nimi.
Krótko mówiąc, dodaj indeksy do kolumn, które są często używane w zapytaniach wybierających, ale staraj się unikać dodawania zbyt wielu, więc najpierw dodaj najczęściej używane kolumny.
Potem jest kwestia testowania obciążenia, aby zobaczyć, jak wydajność reaguje w warunkach produkcyjnych, i wielu poprawek, aby znaleźć akceptowalną równowagę.