Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um índice é uma estrutura em disco associada a uma tabela ou exibição, que agiliza a recuperação das linhas de uma tabela ou exibição. Um índice contém chaves criadas de uma ou mais colunas da tabela ou exibição. Essas chaves são armazenadas em uma estrutura (árvore B) que habilita o SQL Server a localizar a linha ou as linhas associadas aos valores de chave de forma rápida e eficaz.
Uma tabela ou exibição pode conter os seguintes tipos de índices:
Clusterizado
Índices clusterizados classificam e armazenam as linhas de dados na tabela ou exibição com base em seus valores de chave. Estas são as colunas incluídas na definição de índice. Pode haver apenas um índice clusterizado por tabela, pois as próprias linhas de dados podem ser classificadas em apenas uma ordem.
A única vez que as linhas de dados em uma tabela são armazenadas em ordem classificada é quando a tabela contém um índice clusterizado. Quando uma tabela tem um índice clusterizado, a tabela é chamada de tabela clusterizado. Se uma tabela não tiver nenhum índice clusterizado, suas linhas de dados serão armazenadas em uma estrutura não ordenada chamada heap.
Não clusterizado
Índices não clusterizados 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 linha depende se as páginas de dados são armazenadas em um heap ou em uma tabela clusterizada. Para um heap, 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 contornar os limites existentes de chave de índice — 900 bytes e 16 colunas de chave — e executar consultas totalmente cobertas e indexadas. Para obter mais informações, consulte Create Indexes with Included Columns.
Tanto os índices clusterizados quanto os não clusterizados podem ser exclusivos. Isso significa que nenhuma das duas linhas 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 Índices Exclusivos.
Os índices são mantidos automaticamente para uma tabela ou exibição sempre que os dados da tabela são modificados.
Consulte Índices para obter tipos adicionais de índices de finalidade especial.
Índices e restrições
Os índices são criados automaticamente quando as restrições PRIMARY KEY e UNIQUE são definidas em colunas de tabela. Por exemplo, quando você cria uma tabela e identifica uma coluna específica para ser a chave primária, o Mecanismo de Banco de Dados cria automaticamente uma restrição PRIMARY KEY e um índice nessa coluna. Para obter mais informações, consulte Criar chaves primárias e criar restrições exclusivas.
Como os índices são usados pelo otimizador de consulta
Índices bem projetados podem reduzir as operações de E/S de 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 verificação de tabela ou pode estar verificando um ou mais índices se existirem.
Ao executar 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. A varredura de tabela gera muitas operações de E/S de disco e pode ser exigente em termos de recursos. No entanto, uma verificação de tabela poderá ser o método mais eficiente se, por exemplo, o conjunto de resultados da consulta for um alto percentual de linhas da tabela.
Quando o otimizador de consulta usa um índice, ele pesquisa as colunas de 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 na tabela porque, ao contrário de uma tabela, um índice frequentemente contém 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 deverá usar uma verificação de tabela. Sua tarefa é projetar e criar índices mais adequados ao seu ambiente para que o otimizador de consulta tenha uma seleção de índices eficientes dos quais selecionar. O SQL Server fornece o Orientador de Otimização do Mecanismo de Banco de Dados para ajudar na análise do ambiente do banco de dados e na seleção de índices apropriados.