Durante o desenvolvimento do aplicativo, tenho muitas tabelas que armazenam "pequenas" quantidades de dados (geralmente 10-40 valores, id
+ value
e às vezes type
) que contêm atributos para "objetos", como fresco/podre, vermelho/verde/azul para produtos.
Não coloco esses atributos na tabela de produtos porque os componentes eletrônicos não podem ser frescos, o gás oxigênio não pode ser vermelho e as tabelas não podem ter contagem ilimitada de linhas...
Para armazenar atributos, eu uso pequenas tabelas personalizadas onde 2-3 campos: id
para vincular, name
para mostrar no aplicativo e, às vezes, type
se grupos de atributos na mesma categoria.
Os "objetos" primários são vinculados a atributos por meio de tabelas muitos-para-muitos intermediárias.
Existe alguma razão para criar e manter índices para esses "pequenos dicionários" com menos de 1000 itens (geralmente 10-40)?
Meu banco de dados de destino é Oracle, mas espero que responda independente do fornecedor ...
Preencho - não, mas não tenho competências técnicas que justifiquem o meu preenchimento...
Geralmente sim. Na falta de um índice, o padrão de acesso deve inspecionar cada linha, apenas para ver se é aquela que você precisa ou não. O problema não é o tamanho da tabela, mas a simultaneidade. Dependendo do seu nível de isolamento, suas verificações podem ser bloqueadas atrás de transações não confirmadas apenas para aguardar o desbloqueio de linhas que são 'desinteressantes'. Como é garantido que sua verificação 'olhar' para cada linha, cada verificação será bloqueada por trás de qualquer gravação (inserir, excluir ou atualizar). O padrão do Oracle é o isolamento de instantâneo, o que é bom nessa situação (sem bloqueio), mas outros fornecedores adotam como padrão outra coisa, por exemplo. O SQL Server será padronizado para Leitura confirmada, o que bloqueia .
Com um índice presente, seu padrão de acesso examinará apenas as linhas relevantes (dentro do intervalo de chaves desejado), portanto, a chance estatística pura de encontrar um conflito de bloqueio é bastante reduzida.