Partilhar via


Criar um índice clusterizado

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Banco de Dados SQL no Microsoft Fabric

Você pode criar índices clusterizados nas tabelas usando o SQL Server Management Studio ou o Transact-SQL. Com poucas exceções, toda tabela deveria ter um índice clusterizado. Além de melhorar o desempenho da consulta, o índice clusterizado pode ser recompilado ou reorganizado sob demanda para controlar a fragmentação de tabela. Um índice clusterizado também pode ser criado em uma exibição. (Os índices clusterizados são definidos no artigo Índices clusterizados e não clusterizados.)

Implementações comuns

Os índices clusterizados são implementados das seguintes maneiras:

  • Restrições PRIMARY KEY e UNIQUE

    Ao criar uma restrição PRIMARY KEY, um índice clusterizado exclusivo para a coluna ou para as colunas será criado automaticamente se um índice clusterizado na tabela ainda não existir e você não especificar um índice não clusterizado exclusivo. A coluna de chave primária não pode permitir valores NULL.

    Ao criar uma restrição UNIQUE, por padrão, um índice não clusterizado exclusivo é criado para impor uma restrição UNIQUE. Você poderá especificar um índice clusterizado exclusivo se ainda não existir um índice clusterizado na tabela.

    O índice criado como parte da restrição recebe automaticamente o mesmo nome da restrição. Para obter mais informações, confira Restrições de chave primária e chave estrangeira e Restrições exclusivas e restrições de verificação.

  • Índice independente de uma restrição

    Você pode criar um índice clusterizado em uma coluna diferente da coluna de chave primária se uma restrição de chave primária não clusterizada tiver sido especificada.

Limitações

  • Quando uma estrutura de índice clusterizado é criada, o espaço em disco de ambas as estruturas, a antiga (origem) e a nova (destino), é necessário em seus respectivos arquivos e grupos de arquivos. A desalocação da estrutura antiga não ocorre até que a transação completa seja confirmada. Pode igualmente ser necessário espaço temporário em disco adicional para classificação. Para obter mais informações, consulte Disk Space Requirements for Index DDL Operations.

  • Se um índice clusterizado for criado em uma pilha com vários índices não clusterizados existentes, todos os índices não clusterizados deverão ser recriados de modo que contenham o valor de chave de clusterização em vez do RID (Identificador de Linha). De forma semelhante, se um índice clusterizado for descartado em uma tabela que tem vários índices não clusterizados, todos os índices não clusterizados serão recriados como parte da operação DROP. Esse processo pode demorar um tempo significativo em tabelas grandes.

    A forma preferencial de criação de índices em tabelas grandes é iniciar com o índice clusterizado e depois criar os índices não clusterizados. Considere definir a opção ONLINE como ON ao criar índices em tabelas existentes. Quando definida como ON, os bloqueios de tabela de longo prazo não são mantidos. Isso permite consultas ou atualizações à tabela subjacente para continuar. Para obter mais informações, consulte Perform Index Operations Online.

  • A chave de índice de um índice clusterizado não pode conter colunas varchar com dados existentes na unidade de alocação ROW_OVERFLOW_DATA. Se um índice clusterizado for criado em uma coluna varchar e os dados existentes estiverem na unidade de alocação IN_ROW_DATA, as ações seguintes de inserção ou de atualização na coluna que transmitiriam os dados de forma externa à linha falharão. Para obter informações sobre tabelas que podem conter dados de estouro de linha, use a função de gerenciamento dinâmico sys.dm_db_index_physical_stats (Transact-SQL).

Permissões

Requer a permissão ALTER na tabela ou exibição. O usuário deve ser membro da função de servidor fixa sysadmin ou das funções de banco de dados fixas db_ddladmin e db_owner .

Use SQL Server Management Studio

Criar um índice clusterizado usando o Pesquisador de Objetos

  1. No Pesquisador de Objetos, expanda a tabela na qual você deseja criar um índice clusterizado.

  2. Clique com o botão direito do mouse na pasta Índices, aponte para Novo Índice e selecione Índice Clusterizado....

  3. Na caixa de diálogo Novo Índice , na página Geral , insira o nome do novo índice na caixa Nome do índice .

  4. Em Colunas de chave de índice, selecione Adicionar....

  5. Na caixa de diálogo Selecionar Colunas de table_name, marque a caixa de seleção da coluna de tabela a ser adicionada ao índice clusterizado.

  6. Selecione OK.

  7. Na caixa de diálogo Novo Índice, selecione OK.

Criar um índice clusterizado ao usar o Designer de Tabela

  1. No Pesquisador de Objetos, expanda o banco de dados na qual você deseja criar uma tabela com um índice clusterizado.

  2. Clique com o botão direito do mouse na pasta Tabelas e selecione Nova Tabela....

  3. Crie uma tabela como você faria normalmente. Para obter mais informações, confira Criar tabelas (Mecanismo de Banco de Dados).

  4. Clique com o botão direito do mouse na nova tabela criada anteriormente e escolha Design.

  5. No menu Designer de Tabela , selecione Índices/Chaves.

  6. Na caixa de diálogo Índices/Chaves, selecione Adicionar.

  7. Selecione o novo índice na caixa de texto Índice ou Chave Exclusiva/Primária Selecionada .

  8. Na grade, selecione Criar como Clusterizadoe selecione Sim na lista suspensa, à direita da propriedade.

  9. Selecione Fechar.

  10. No menu Arquivo, selecione Salvar table_name.

Usar o Transact-SQL

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados.

  2. Na barra Padrão, selecione Nova Consulta.

  3. Copie e cole o exemplo a seguir na janela de consulta e selecione Executar.

    USE AdventureWorks2022;
    GO
    
    -- Create a new table with three columns.
    CREATE TABLE dbo.TestTable (
        TestCol1 INT NOT NULL,
        TestCol2 NCHAR(10) NULL,
        TestCol3 NVARCHAR(50) NULL
    );
    GO
    
    -- Create a clustered index called IX_TestTable_TestCol1
    -- on the dbo.TestTable table using the TestCol1 column.
    CREATE CLUSTERED INDEX IX_TestTable_TestCol1 ON dbo.TestTable (TestCol1);
    GO
    

Para obter mais informações, veja CREATE INDEX (Transact-SQL).