Это зависит от того, что вы подразумеваете под «хорошим» и «плохим». По сути, вы должны понимать, что каждый добавленный вами индекс будет увеличивать производительность при любом поиске по этому столбцу (поэтому добавление индекса в столбец 'lastname' таблицы person увеличит производительность по запросам, в которых есть "where lastname ="), но снизить производительность записи по всей таблице.
Причина этого в том, что когда вы добавляете или обновляете строку, она должна добавлять или обновлять как саму таблицу, так и каждый индекс, членом которого является строка. Поэтому, если у вас есть пять индексов в таблице, каждое дополнение должно записывать в шесть мест - пять индексов и таблицу - и обновление может касаться до шести мест в худшем случае.
Создание индекса - это баланс между скоростью запроса и скоростью записи. В некоторых случаях, например, в datamart, который загружается с данными только раз в неделю в одночасовом задании, но запрашивается тысячи раз в день, имеет смысл перегружать индексы и максимально ускорять запросы. Однако в случае систем обработки транзакций в Интернете вы хотите попытаться найти баланс между ними.
Короче говоря, добавьте индексы к столбцам, которые часто используются в запросах на выборку, но старайтесь избегать добавления слишком многих и добавьте сначала наиболее часто используемые столбцы.
После этого необходимо провести нагрузочное тестирование, чтобы увидеть, как производительность реагирует в производственных условиях, и провести множество настроек, чтобы найти приемлемый баланс.