Compartilhar via


Heaps (tabelas sem índices clusterizados)

Um heap é uma tabela sem um índice clusterizado. Um ou mais índices não clusterizados podem ser criados em tabelas armazenadas como um heap. Os dados são armazenados no heap sem especificar um pedido. Normalmente, os dados são inicialmente armazenados na ordem na qual as linhas são inseridas na tabela, mas o Mecanismo de Banco de Dados pode mover dados no heap para armazenar as linhas com eficiência; portanto, a ordem de dados não pode ser prevista. Para garantir a ordem das linhas retornadas de um heap, você deve usar a ORDER BY cláusula. Para especificar a ordem de armazenamento das linhas, crie um índice clusterizado na tabela, para que a tabela não seja um heap.

Observação

Às vezes, há boas razões para deixar uma tabela como um heap em vez de criar um índice clusterizado, mas usar heaps efetivamente é uma habilidade avançada. A maioria das tabelas deve ter um índice clusterizado cuidadosamente escolhido, a menos que exista um bom motivo para deixar a tabela como uma pilha.

Quando usar um heap

Se uma tabela for um heap e não tiver índices não clusterizados, a tabela inteira deverá ser examinada (uma verificação de tabela) para localizar qualquer linha. Isso pode ser aceitável quando a tabela é pequena, como uma lista dos 12 escritórios regionais de uma empresa.

Quando uma tabela é armazenada como um heap, as linhas individuais são identificadas por referência a um RID (identificador de linha) que consiste no número do arquivo, número da página de dados e slot na página. A ID da linha é uma estrutura pequena e eficiente. Às vezes, os arquitetos de dados usam heaps quando os dados são sempre acessados por meio de índices não clusterizados e o RID é menor que uma chave de índice clusterizado.

Quando não usar um heap

Não use um heap quando os dados são retornados com frequência em uma ordem classificada. Um índice clusterizado na coluna de classificação pode evitar a operação de classificação.

Não use um heap quando os dados são agrupados com frequência. Os dados devem ser classificados antes de serem agrupados e um índice clusterizado na coluna de classificação pode evitar a operação de classificação.

Não use um heap quando intervalos de dados são frequentemente consultados da tabela. Um índice clusterizado na coluna de intervalo evitará classificar todo o heap.

Não use um heap quando não houver índices não clusterizados e a tabela for grande. Em um heap, todas as linhas do heap devem ser lidas para localizar qualquer linha.

Gerenciamento de heaps

Para criar um heap, crie uma tabela sem um índice clusterizado. Se uma tabela já tiver um índice clusterizado, remova o índice clusterizado para retornar a tabela a um heap.

Para remover um heap, crie um índice clusterizado no heap.

Para reconstruir um heap para recuperar o espaço desperdiçado, crie um índice clusterizado no heap e, em seguida, remova esse índice clusterizado.

Aviso

Criar ou remover índices clusterizados requer reescrever a tabela inteira. Se a tabela tiver índices não clusterizados, todos os índices não clusterizados deverão ser recriados sempre que o índice clusterizado for alterado. Portanto, alterar de um heap para uma estrutura de índice clusterizado ou voltar pode levar muito tempo e exigir espaço em disco para reordenar dados no tempdb.

CRIAR ÍNDICE (Transact-SQL)

DROP INDEX (Transact-SQL)

Índices clusterizados e não clusterizados descritos