Ouvi dizer que só pode haver um índice agrupado? Posso estar errado, mas tenho certeza que li em algum lugar.
Em uma das minhas tabelas do SQL Server 2005, tenho as seguintes colunas:
SerialNum -------- BigInt -------- Chave Primária
Distrito -------- nvarchar(50)
SchemeType ------ nvarchar(50)
Quando abro a tabela no modo de design usando o SQL Server Management Studio, noto que a propriedade Clustered Index está habilitada para District , enquanto está desabilitada para SchemeType .
Se pode haver apenas um índice clusterizado, por que District tem essa propriedade habilitada quando SerialNum já está definido como chave primária?
Se pode haver mais índices clusterizados, como habilitar essa propriedade para a coluna SchemeType ?
Chave primária e índice clusterizado são duas coisas diferentes, embora sejam frequentemente usados em conjunto. Algumas possíveis razões pelas quais sua tabela acabou assim:
(a) poderia ter sido criado com uma chave primária não clusterizada
PRIMARY KEY NONCLUSTERED
usando , então o índice clusterizado foi adicionado.(b) o índice clusterizado poderia ter sido adicionado e, em seguida, a chave primária adicionada (nesse caso, não pode ser agrupado, pois já existe um índice clusterizado).
Qualquer um desses poderia ter sido decisões intencionais de design, acidentes, mudanças em pensamentos posteriores, etc.
Ignore a propriedade na exibição de design do Management Studio. O índice clusterizado é a tabela, mas é definido pela(s) coluna(s) especificada(s). As outras colunas ainda fazem parte tecnicamente do índice clusterizado, mas não são colunas-chave no índice. Chamar isso de "ativado/desativado" é enganoso.
Só pode haver um índice clusterizado, porque o índice clusterizado são os próprios dados da tabela. É uma forma de organizar os dados da tabela com base em uma chave de agrupamento. É semelhante às tabelas organizadas por índice (IOT) da Oracle. Índices não clusterizados são estruturas de dados separadas. Os índices agrupados são os próprios dados organizados como uma b-tree.
Por padrão, o SQL Server torna a chave primária como um índice clusterizado, se ainda não houver um. Parece que, no seu caso, a chave primária foi criada como um 'índice não agrupado' e a coluna District como um 'índice agrupado'.
Você pode ter apenas um índice clusterizado por tabela. Uma chave primária não é um índice clusterizado. Para responder às suas perguntas:
Se pode haver apenas um índice clusterizado, por que District tem essa propriedade habilitada quando SerialNum já está definido como chave primária? Isso ocorre porque o índice clusterizado é criado em District. Somente isso aparecerá como ativado e o restante como desativado.
Se pode haver mais índices clusterizados, como habilitar essa propriedade para a coluna SchemeType? Você não pode ter mais de um índice clusterizado em uma tabela. Você terá que descartar o índice clusterizado em District e recriar um para SchemeType. Se você ainda deseja manter o índice clusterizado em District, um truque que pode usar é criar uma exibição indexada e, em seguida, criar um índice clusterizado na exibição de SchemeType. Você pode precisar da edição Enterprise para isso.