Existe algum motivo para usar o índice para tabelas muito pequenas (até 1000 linhas)?

9

Durante o desenvolvimento de aplicativos, tenho muitas tabelas que armazenam uma quantidade "pequena" de dados (geralmente valores de 10 a 40, id+ valuee às vezes type) que contêm atributos para "objetos", como frescos / apodrecidos, vermelho / verde / azul para produtos.

Eu não coloquei esses atributos na tabela de produtos porque os componentes eletrônicos não podem ser atualizados e o gás oxigênio não pode ser vermelho e as tabelas não podem ter contagem ilimitada de linhas ...

Para armazenar atributos, uso pequenas tabelas personalizadas, onde 2-3 campos: idpara vinculação, namepara exibição no aplicativo e em algum momento typese grupos de atributos na mesma categoria.

"Objetos" primários estão vinculados a atributos através de tabelas intermediárias muitos para muitos.

Existe algum motivo 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 ...

Encho - não, mas não tenho habilidades técnicas para justificar meu preenchimento ...

gavenkoa
fonte

Respostas:

14

Geralmente sim. Na falta de um índice, o padrão de acesso deve inspecionar todas as linhas, apenas para ver se é o que você precisa ou não. O problema não é o tamanho da tabela, mas sim a simultaneidade. Dependendo do seu nível de isolamento, suas varreduras podem bloquear transações não confirmadas apenas para aguardar o desbloqueio das linhas que são 'desinteressantes'. Como sua verificação é garantida para 'olhar' a cada linha, toda verificação será bloqueada por trás de qualquer gravação (inserção, exclusão ou atualização). O Oracle padroniza o isolamento de instantâneo, o que é bom nessa situação (sem bloqueio), mas outros fornecedores assumem o padrão de outra coisa, por exemplo. O SQL Server usará como padrão leitura confirmada, que é bloqueada.

Com um índice presente, seu padrão de acesso só olha para as linhas relevantes (dentro do intervalo de chaves desejado), portanto, a chance estatística pura de atingir um conflito de bloqueio é bastante reduzida.

Remus Rusanu
fonte
Obrigado pela explicação, tenho uma pergunta de acompanhamento (apesar de agora ser três anos depois). E quanto a tabelas muito pequenas com no máximo 3 ou 4 linhas?
Rob Rob
Pequenas mesas Cert (que se encaixam em 1-2 páginas), muito provavelmente, ser digitalizados
Remus Rusanu
@Remus necessário para criar índice no MySQL
Singh Kailash