Gostaria de falar sobre como há muitas coisas que podem ser feitas para melhorar o desempenho. A primeira coisa é sempre investigar se os índices corretos estão no lugar. Particularmente preocupante em um banco de dados normalizado é garantir que os FKs sejam indexados. Provavelmente isso resolveria muitos problemas de desempenho.
Outras coisas a serem observadas seriam reescrever o código SQL para usar técnicas mais eficientes, como livrar-se de cursores e subconsultas correlacionadas e tornar as cláusulas where sargable. Você gostaria de analisar as consultas com pior desempenho individualmente. Você também deseja revisar as consultas que são executadas com frequência (especialmente se vários usuários as executarem simultaneamente), já que uma pequena alteração nessas pode se multiplicar por meio do sistema. Se as suas piores consultas vierem de um ORM, elas talvez precisem ser reescritas como procs armazenados para que possam ser ajustadas no desempenho.
Você também pode querer ter certeza de que tem um problema de desempenho. O que você pode ter é realmente um problema de bloqueio onde o código de desempenho está sendo bloqueado por outros processos e tem que esperar.
Em seguida, você veria o hardware, se você tiver hardware e conexões de rede com pouca potência, provavelmente nenhuma outra alteração consertará isso.
Em um sistema corporativo grande, você pode considerar o particionamento de dados.
A desnormalização é uma técnica para melhorar o desempenho, mas é a última última que você gostaria de considerar. Primeiro, você tem o risco de alterar drasticamente os dados da estrutura. Converter os dados para a nova estrutura é algo que pode dar muito errado se um erro é cometido e é mais demorado fazer esse tipo de mudança estrutural do que qualquer outra melhoria de desempenho possível. Também seria irresponsável desnormalizar sem criar gatilhos para garantir que os dados permaneçam sincronizados à medida que são alterados nas tabelas desordenadas. Isso pode significar que as seleções são imporved, mas as consultas de ação são mais lentas, portanto, o desempenho pode não ser tão importante quanto você pensa. Também é uma preocupação que, ao desnormalizar, você possa tornar as tabelas significativamente mais amplas e isso pode afetar o desempenho negativamente se você tiver tabelas largas.