Regra
Evitar redundante base de dados redundantes.
A sobreposição de de base de dados índices desperdiçam
armazenamento e abrandam lentas escreve.
Linguagens suportadas: SQLIntrodução
Os índices redundantes ocorrem quando vários índices abrangem as mesmas colunas ou quando um índice é um prefixo de outro. Cada índice consome espaço em disco e deve ser atualizado nas operações INSERT, UPDATE e DELETE. Uma tabela com cinco índices sobrepostos em colunas semelhantes paga cinco vezes a penalização de desempenho de escrita, enquanto apenas um índice seria suficiente para a otimização da leitura.
Porque é importante
Impacto no desempenho: Cada índice torna as operações de escrita mais lentas porque a base de dados tem de atualizar todos os índices quando os dados são alterados. Os índices redundantes multiplicam este custo sem proporcionar benefícios de consulta. Uma tabela com três índices redundantes em ID do utilizador triplica a sobrecarga de escrita enquanto apenas um índice é utilizado.
Custos de armazenamento: Os índices consomem espaço em disco proporcional ao tamanho das colunas indexadas e à contagem de linhas. Os índices redundantes desperdiçam armazenamento que poderia ser utilizado para dados reais ou índices úteis. Tabelas grandes com índices desnecessários podem desperdiçar gigabytes de armazenamento.
Complexidade da manutenção: Mais índices significam mais objectos para monitorizar, analisar e manter. Os administradores de bases de dados gastam tempo a otimizar índices que não fornecem qualquer valor. Os planeadores de consultas têm mais opções para avaliar, podendo escolher planos de execução não optimizados.
Exemplos de código
Não conforme:
-- Índices redundantes na tabela de utilizadores
CRIAR INDEX idx_utilizadores_email ON users(email);
CRIAR INDEX idx_utilizadores_email_status ON utilizadores(email, status);
CRIAR INDEX idx_utilizadores_criados ON users(created_at);
CRIAR INDEX idx_users_created_status ON users(created_at, status);
-- Os índices de coluna única são redundantes porque
-- os índices compostos podem servir as mesmas consultas
Porque é que é errado: O índice sobre o correio eletrónico é redundante porque idx_users_email_status começa com correio eletrónico e pode tratar as consultas filtradas apenas por correio eletrónico. De igual modo, idx_users_created é redundante com idx_users_created_status. Cada inserção ou atualização desta tabela actualiza quatro índices, quando dois seriam suficientes.
Conformidade:
-- Índices optimizados na tabela de utilizadores
CRIAR INDEX idx_usuarios_email_status ON users(email, status);
CRIAR INDEX idx_users_created_status ON users(created_at, status);
-- Os índices compostos podem servir consultas nas suas colunas de prefixo
-- Consultas apenas sobre email usam idx_users_email_status
-- Consultas apenas em created_at usam idx_users_created_status
Porque é que isto é importante: Dois índices compostos servem todos os padrões de consulta, eliminando a redundância. As consultas filtradas por correio eletrónico utilizam apenas o primeiro índice, e as consultas filtradas por created_at por si só, utiliza o segundo. O desempenho da escrita melhora porque apenas dois índices necessitam de actualizações em vez de quatro.
Conclusão
Audite regularmente os índices da sua base de dados para identificar os redundantes. Remova os índices que são prefixos de outros índices ou que duplicam a cobertura. Os índices compostos podem servir consultas nas suas colunas principais, eliminando a necessidade de índices de coluna única separados na maioria dos casos.
.avif)
