esta resposta é minha opinião pessoal baseada estou usando minha lógica matemática para responder
a segunda questão era sobre a fronteira onde parar, primeiro vamos fazer alguns cálculos matemáticos, suponha que temos N linhas com L campos em uma tabela, se indexarmos todos os campos, obteremos L novas tabelas de índice onde cada tabela será classificada em um de forma significativa os dados do campo de índice, à primeira vista se sua tabela tem um peso W, ela se tornará W * 2 (1 tera se tornará 2 tera) se você tiver 100 mesa grande (eu já trabalhei no projeto onde o número da mesa era em torno da mesa de 1800) você perderá 100 vezes esse espaço (100 tera), isso está longe de ser sábio.
Se formos aplicar índices em todas as tabelas, teremos que pensar sobre as atualizações de índice onde uma atualização dispara todos os índices atualizam esta é uma seleção de todos os equivalentes não ordenados no tempo
a partir disso concluo que você tem neste cenário que se você perder esse tempo é preferível perdê-lo em um select nem em uma atualização porque se você selecionar um campo que não está indexado você não irá disparar outro select em todos os campos que estão não indexado
o que indexar?
chaves estrangeiras: é uma obrigação baseada em
chave primária: ainda não tenho certeza sobre isso pode ser se alguém ler isso poderia ajudar neste caso
outros campos: a primeira resposta natural é a metade dos campos restantes porque: se você indexar mais você não está longe da melhor resposta se você indexar menos você também não está longe porque sabemos que nenhum índice é ruim e todos indexados também é ruim.
destes 3 pontos posso concluir que se temos L campos compostos por K chaves o limite deve ser algo próximo a ((L-K)/2)+K
mais ou menos L / 10
esta resposta é baseada na minha lógica e preços pessoais