Olá a todos,
Entendo que esta é uma pergunta comum, mas senti que seria melhor esclarecer.
Tenho uma tabela enorme que consome 95 GB de espaço. Ela tem um
índice agrupado em cinco colunas (ID, Nome, Classe, Nome do Grupo e Estado).
A coluna ID é uma coluna de identidade com precisão 15 e escala 0. Tínhamos um problema de linhas duplicadas devido à coluna de identidade nesta tabela.
Por exemplo, de acordo com nossas necessidades comerciais, não deveríamos permitir duas linhas com os mesmos valores de Nome, Classe, Nome do Grupo e Estado. Nosso servidor ASE é acessado por outra aplicação - dbAnalytics que irá inserir, atualizar e excluir registros de nosso banco de dados. Quando uma linha é inserida pela primeira vez, ela será inserida com o estado inserido. Quando dbAnalytics tenta atualizar o mesmo registro no banco de dados, deve atualizar o registro existente e alterar a coluna de estado para atualizado. Temos um problema aqui. A coluna de identidade gera novos valores de ID e insere as linhas como um novo registro em vez de atualizar o existente. Não entendemos completamente como o dbAnalytics funciona, portanto, estamos tentando resolver isso no backend.
Devido aos problemas encontrados com a coluna de Identidade, decidimos remover a coluna ID do índice agrupado e recriá-la em 3 colunas, ou seja - Nome, Classe e Nome do Grupo.
Segundo nosso conhecimento, o índice agrupado ordenará os dados em ordem classificada, o que ajudaria nas consultas de intervalo. Como estamos removendo a coluna ID que ajudava a ordenar os dados na tabela sequencialmente, tenho dúvidas sobre os problemas de desempenho que poderíamos ter no futuro se criarmos um índice agrupado. Como o índice agrupado tende sempre a manter os dados em ordem classificada, há uma sobrecarga adicional em reorganizar os dados durante inserções ou atualizações.
Portanto, estamos pensando em criar
um índice não agrupado ou um índice não agrupado único nessas três colunas (Nome, Classe e Nome do Grupo).
Temos uma preocupação sobre o desempenho do disco adicional necessário para navegar até a página de dados a partir da página de índice. Esperamos que isso não tenha um grande impacto.
Precisamos de ajuda para decidir se devemos optar por um índice agrupado ou não agrupado com base na análise detalhada acima. Por favor, avise-nos se houver alguma outra abordagem melhor disponível.
Obrigado antecipadamente.
Saudações
ADNAN