Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Um índice é uma estrutura em disco associada a uma tabela ou exibição que acelera a recuperação de linhas da tabela ou exibição. Um índice contém chaves criadas a partir de uma ou mais colunas na tabela ou exibição. Estas chaves são armazenadas numa estrutura (B-tree) que permite ao Mecanismo de Banco de Dados do SQL Server encontrar a linha ou linhas associadas aos valores-chave de forma rápida e eficiente.
Note
A documentação usa o termo árvore B geralmente em referência a índices. Em índices de armazenamento em linha, o Mecanismo de Base de Dados implementa uma árvore B+. Isso não se aplica a índices de armazenamento em colunas ou a índices em tabelas com otimização de memória. Para obter mais informações, consulte o guia de arquitetura e design de índices do SQL Server e SQL do Azure .
Uma tabela ou vista pode conter índices agrupados e não agrupados .
Os índices agrupados e não agrupados podem ser exclusivos. Com um índice exclusivo, nenhuma linha pode ter o mesmo valor para a chave de índice. Caso contrário, o índice não é exclusivo e várias linhas podem compartilhar o mesmo valor de chave. Para obter mais informações, consulte Criar um índice exclusivo.
Os índices são mantidos automaticamente para uma tabela ou exibição sempre que os dados da tabela são modificados.
Para mais tipos de índices de propósito especial, incluindo índices em tabelas otimizadas para memória, veja Índices.
Índices agrupados
Os índices agrupados classificam e armazenam as linhas de dados na tabela ou exibição com base em seus valores de chave. Esses valores-chave são as colunas incluídas na definição do índice. Só podes ter um índice agrupado por tabela, porque as linhas de dados podem ser armazenadas numa única ordem.
A única vez que as linhas de dados em uma tabela são armazenadas em ordem ordenada é quando a tabela contém um índice clusterizado. Quando uma tabela tem um índice agrupado, a tabela é chamada de tabela agrupada. Se uma tabela não tiver índice agrupado, as suas linhas de dados são armazenadas numa estrutura não ordenada chamada heap.
Índices não agrupados
Os índices não agrupados têm uma estrutura separada das linhas de dados. Um índice não clusterizado contém os valores de chave de índice não clusterizados e cada entrada de valor de chave tem um ponteiro para a linha de dados que contém o valor da chave.
O ponteiro de uma linha de índice em um índice não clusterizado para uma linha de dados é chamado de localizador de linha. A estrutura do localizador de linhas depende se as páginas de dados são armazenadas em uma pilha ou em uma tabela clusterizada. Para uma pilha, um localizador de linha é um ponteiro para a linha. Para uma tabela clusterizada, o localizador de linha é a chave de índice clusterizada.
Você pode adicionar colunas não-chave ao nível folha do índice não clusterizado para ignorar os limites de chave de índice existentes e executar consultas totalmente cobertas. Para obter mais informações, consulte Criar índices com colunas incluídas. Para obter detalhes sobre limites de chave de índice, consulte Especificações de capacidade máxima para o SQL Server.
Índices e restrições
O Database Engine cria automaticamente índices quando defines PRIMARY KEY e UNIQUE restrições nas colunas das tabelas. Por exemplo, quando cria uma tabela com uma UNIQUE restrição, o Database Engine cria automaticamente um índice não clusterizado. Se configurar um PRIMARY KEY, o Database Engine cria automaticamente um índice agrupado, a menos que já exista um índice agrupado. Quando tentas impor uma PRIMARY KEY restrição numa tabela existente e já existe um índice clusterizado nessa tabela, o Database Engine aplica a chave primária usando um índice não clusterizado.
Para obter mais informações, consulte Criar chaves primárias e Criar restrições exclusivas.
Como o otimizador de consultas utiliza índices
Índices bem projetados podem reduzir as operações de E/S de disco e consumir menos recursos do sistema. Portanto, esses índices melhoram o desempenho da consulta. Os índices podem ser úteis para várias consultas que contêm SELECT, UPDATE, DELETE ou MERGE declarações. Considere a consulta SELECT JobTitle, HireDate FROM HumanResources.Employee WHERE BusinessEntityID = 250 no banco de dados AdventureWorks2025. Quando executa esta consulta, o otimizador avalia cada método disponível para recuperar os dados e seleciona o método mais eficiente. O método pode ser uma varredura de tabela, ou pode ser digitalizar um ou mais índices, se existirem.
Durante uma verificação de tabela, o otimizador de consulta lê todas as linhas da tabela e extrai as linhas que atendem aos critérios da consulta. Uma verificação de tabela gera muitas operações de E/S de disco e pode exigir bastantes recursos. No entanto, uma verificação de tabela pode ser o método mais eficiente se, por exemplo, o conjunto de resultados da consulta for uma elevada percentagem de linhas da tabela.
Quando o otimizador de consulta usa um índice, ele pesquisa as colunas da chave de índice, localiza o local de armazenamento das linhas necessárias para a consulta e extrai as linhas correspondentes desse local. Geralmente, pesquisar o índice é muito mais rápido do que pesquisar a tabela. Ao contrário de uma tabela, um índice frequentemente contém muito poucas colunas por linha e as linhas estão em ordem ordenada.
O otimizador de consulta normalmente seleciona o método mais eficiente ao executar consultas. No entanto, se nenhum índice estiver disponível, o otimizador de consulta deve usar uma verificação de tabela. Precisa de desenhar e criar índices que sejam os mais adequados ao seu ambiente, de modo a que o otimizador de consultas tenha uma seleção de índices eficientes para selecionar. O Database Engine disponibiliza o Database Engine Tuning Advisor para ajudar na análise do seu ambiente de base de dados e na seleção dos índices adequados.
Quando não existe um índice vantajoso, o otimizador regista essa recomendação nos planos de execução e nas vistas de gestão dinâmica de índices em falta. Para dar seguimento a essas sugestões, veja Ajustar índices não agrupados com sugestões de índices em falta.
Note
Um índice desativado permanece nos metadados, mas o otimizador ignora-o até que o reconstruas. Para obter mais informações, consulte Desabilitar índices e restrições e Habilitar índices e restrições.
Para mais informações sobre diretrizes de design de índices e internos, consulte o guia de arquitetura e design do Índice.