- 11/02/2019
- 4 minutos para ler
-
- M
- M
- C
- M
- r
-
+9
Aplica-se a: SQL Server (todas as versões com suporte) Banco de dados SQL do Azure
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 visualização. Essas chaves são armazenadas em uma estrutura (árvore B) que permite ao SQL Server encontrar a linha ou linhas associadas aos valores-chave de forma rápida e eficiente.
Uma tabela ou exibição pode conter os seguintes tipos de índices:
-
Clustered
- Os índices clusterizados classificam e armazenam as linhas de dados na tabela ou exibição com base em seus valores-chave. Estas são as colunas incluídas na definição do índice. Pode haver apenas um índice clusterizado por tabela, porque as próprias linhas de dados podem ser armazenadas em apenas uma ordem.
- A única vez em que as linhas de dados em uma tabela são armazenadas em ordem classificada é quando a tabela contém um índice agrupado. Quando uma tabela tem um índice clusterizado, a tabela é chamada de tabela clusterizada. Se uma tabela não tem índice clusterizado, suas linhas de dados são armazenadas em uma estrutura não ordenada chamada heap.
-
Não clusterizado
-
Os índices não clusterizados têm uma estrutura separada das linhas de dados. Um índice não clusterizado contém os valores-chave de índice não clusterizado e cada entrada de valor-chave tem um ponteiro para a linha de dados que contém o valor-chave.
-
O ponteiro de uma linha de índice em um não clusterizado índice para uma linha de dados é chamado de localizador de linha. A estrutura do localizador de linha depende se as páginas de dados são armazenadas em um heap ou em uma tabela agrupada. Para um heap, um localizador de linha é um ponteiro para a linha. Para uma tabela clusterizada, o localizador de linha é a chave do índice clusterizado.
-
Você pode adicionar colunas não chave ao nível folha do índice não clusterizado para contornar os limites da chave do índice existente, e executar consultas totalmente cobertas e indexadas. Para obter mais informações, consulte Criar índices com colunas incluídas. Para obter detalhes sobre os limites da chave de índice, consulte Especificações de capacidade máxima para SQL Server.
-
Ambos os índices clusterizados e não clusterizados podem ser exclusivos. Isso significa que duas linhas não podem ter o mesmo valor para a chave do índice. Caso contrário, o índice não é único e várias linhas podem compartilhar o mesmo valor de chave. Para obter mais informações, consulte Criar índices exclusivos.
Os índices são mantidos automaticamente para uma tabela ou exibição sempre que os dados da tabela são modificados.
Consulte os índices para tipos adicionais de índices de propósito especial.
Índices e restrições
Os índices são criados automaticamente quando as restrições PRIMARY KEY e UNIQUE são definidas nas colunas da tabela. Por exemplo, quando você cria uma tabela com uma restrição UNIQUE, o Mecanismo de Banco de Dados cria automaticamente um índice não clusterizado. Se você configurar uma PRIMARY KEY, o Mecanismo de Banco de Dados criará automaticamente um índice clusterizado, a menos que já exista um índice clusterizado. Quando você tenta impor uma restrição PRIMARY KEY em uma tabela existente e já existe um índice clusterizado nessa tabela, o SQL Server aplica a chave primária usando um índice não clusterizado.
Para obter mais informações, consulte Criar chaves primárias e Crie restrições exclusivas.
Como os índices são usados pelo Query Optimizer
Índices bem projetados podem reduzir as operações de E / S do disco e consumir menos recursos do sistema, melhorando o desempenho da consulta. Os índices podem ser úteis para uma variedade de consultas que contêm instruções SELECT, UPDATE, DELETE ou MERGE. Considere a consulta SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250
no banco de dados AdventureWorks2012. Quando essa consulta é executada, o otimizador de consulta 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 varrer um ou mais índices, se eles existirem.
Ao realizar uma varredura de tabela, o otimizador de consulta lê todas as linhas da tabela e extrai as linhas que correspondem os critérios da consulta. Uma varredura de tabela gera muitas operações de E / S de disco e pode consumir muitos 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 alta porcentagem de linhas da tabela.
Quando o otimizador de consulta usa um índice, ele pesquisa o colunas de chave de índice, encontra 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 porque, ao contrário de uma tabela, um índice freqüentemente contém muito poucas colunas por linha e as linhas estão em ordem classificada.
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. Sua tarefa é projetar e criar índices que sejam mais adequados ao seu ambiente para que o otimizador de consulta tenha uma seleção de índices eficientes para selecionar. O SQL Server fornece o Orientador de Otimização do Mecanismo de Banco de Dados para ajudar na análise de seu ambiente de banco de dados e na seleção de índices apropriados.
Importante
Para obter mais informações sobre as diretrizes de design de índice e internos, consulte o Guia de design de índice do SQL Server.
- Guia de design de índice do SQL Server
- Criar índices agrupados
- Criar não agrupados Índices