Creative Saplings

SQLShack (Português)

Fevereiro 22, 2021
No Comments

Os índices são usados para acelerar o processo de consulta no SQL Server, resultando em alta atuação. Eles são semelhantes aos índices de livros didáticos. Nos livros didáticos, se você precisar ir para um capítulo específico, vá para o índice, encontre o número da página do capítulo e vá diretamente para essa página. Sem os índices, o processo de localização do capítulo desejado teria sido muito lento.

O mesmo se aplica a índices em bancos de dados. Sem índices, um SGBD deve percorrer todos os registros da tabela para obter os resultados desejados. Esse processo é chamado de varredura de tabela e é extremamente lento. Por outro lado, se você criar índices, o banco de dados vai primeiro a esse índice e, em seguida, recupera os registros da tabela correspondente diretamente.

Existem dois tipos de índices no SQL Server:

  1. índice agrupado
  2. índice não agrupado

Índice agrupado

Um índice agrupado define a ordem em que os dados são armazenados fisicamente em uma tabela. Os dados da tabela podem ser classificados apenas de maneira, portanto, pode haver apenas um índice clusterizado por tabela. No SQL Server, a restrição de chave primária cria automaticamente um índice clusterizado nessa coluna específica.

Vamos dar uma olhada. Primeiro, crie uma tabela “aluno” dentro de “schooldb” executando o seguinte script ou certifique-se de que seu banco de dados tenha um backup completo se você estiver usando seus dados ativos:

1
2
3
4
5
6
7
8
9
10
11
12
13

CRIAR BASE DE DADOS schooldb
CRIAR TABELA aluno
(
id INT PRIMARY KEY,
name VARCHAR (50) NOT NULL,
gênero VARCHAR (50) NÃO NULO,
Data e hora DOB NÃO NULO,
total_score INT NÃO NULO,
cidade VARCHAR (50) NÃO NULO
)

Aviso aqui na tabela “aluno” nós colocamos prima restrição de chave ry na coluna “id”. Isso cria automaticamente um índice clusterizado na coluna “id”. Para ver todos os índices em uma tabela específica, execute o procedimento armazenado “sp_helpindex”. Este procedimento armazenado aceita o nome da tabela como parâmetro e recupera todos os índices da tabela. A consulta a seguir recupera os índices criados na tabela do aluno.

1
2
3
4
5

USO schooldb
EXECUTAR sp_helpindex aluno

A consulta acima retornará este resultado:

index_name index_description index_keys
PK__student__3213E83F7F60ED59 cluster, chave primária exclusiva localizada em PRIMARY id

Na saída você pode ver o único índice. Este é o índice que foi criado automaticamente devido à restrição da chave primária na coluna “id”.

Este índice agrupado armazena o registro na tabela do aluno na ordem crescente do “id”. Portanto, se o registro inserido tiver o id 5, o registro será inserido na 5ª linha da tabela ao invés da primeira linha. Da mesma forma, se o quarto registro tiver um id 3, ele será inserido na terceira linha em vez da quarta linha. Isso ocorre porque o índice clusterizado deve manter a ordem física dos registros armazenados de acordo com a coluna indexada, ou seja, id. Para ver essa ordem em ação, execute o seguinte script:

O script acima insere dez registros na tabela do aluno. Observe aqui que os registros são inseridos em ordem aleatória dos valores na coluna “id”. Mas, devido ao índice agrupado padrão na coluna id, os registros são armazenados fisicamente na ordem crescente dos valores na coluna “id”. Execute a seguinte instrução SELECT para recuperar os registros da tabela do aluno.

1
2
3
4
5

USE schooldb
SELECIONE * DO aluno

Os registros serão recuperados na seguinte ordem:

Criando índice clusterizado customizado

Você pode criar seu próprio índice customizado, bem como o índice clusterizado padrão. Para criar um novo índice clusterizado em uma tabela, você primeiro deve excluir o índice anterior.

Para excluir um índice, vá para “Pesquisador de objetos- > Bancos de dados- > Database_Name- > Tabelas- > Table_Name – > Índices”. Clique com o botão direito no índice que deseja excluir e selecione EXCLUIR . Veja a captura de tela abaixo.

Agora, para criar um novo índice agrupado, execute o seguinte script:

1
2
3
4
5
6

use schooldb
CRIAR ÍNDICE CLUSTERED IX_tblStudent_Gender_Score
aluno ON (gênero ASC, total_score DESC)

O processo de cre gerar um índice clusterizado é semelhante a um índice normal, com uma exceção. Com o índice clusterizado, você deve usar a palavra-chave “CLUSTERED” antes de “INDEX”.

O script acima cria um índice agrupado denominado “IX_tblStudent_Gender_Score” na tabela do aluno. Este índice é criado nas colunas “gênero” e “total_score”. Um índice que é criado em mais de uma coluna é chamado “índice composto”.

O índice acima primeiro classifica todos os registros na ordem crescente do gênero. Se o gênero for o mesmo para dois ou mais registros, os registros são classificados na ordem decrescente dos valores em sua coluna “total_score”. Você também pode criar um índice agrupado em uma única coluna. Agora, se você selecionar todos os registros do tabela do aluno, eles serão recuperados na seguinte ordem:

Índices não agrupados

Um índice não agrupado não classifica os dados físicos dentro da tabela. o índice não agrupado é armazenado em um local e os dados da tabela são armazenados em outro local. Isso é semelhante a um livro didático onde o conteúdo do livro está localizado em um lugar e o índice está localizado em outro. Isso permite mais de um não agrupado índice por tabela.

É importante mencionar aqui que dentro da tabela os dados serão classificados por um índice agrupado. Porém, dentro do índice não agrupado, os dados são armazenados na ordem especificada. O índice contém valores da coluna nos quais o índice é criado e o endereço do registro ao qual o valor da coluna pertence.

Quando uma consulta é emitida em uma coluna na qual o índice foi criado, o banco de dados irá primeiro ao índice e procurará o endereço da linha correspondente na tabela. Em seguida, ele irá para esse endereço de linha e buscará outros valores de coluna. É devido a essa etapa adicional que os índices não agrupados são mais lentos do que os índices agrupados.

Criando um índice não agrupado

A sintaxe para criar um índice não agrupado é semelhante a o do índice agrupado. No entanto, no caso de um índice não agrupado, a palavra-chave “NONCLUSTERED” é usada em vez de “CLUSTERED”. Dê uma olhada no seguinte script.

1
2
3
4
5
6

use schooldb
CRIAR ÍNDICE NÃO EXCLUSIVO IX_tblStudent_Name
Estudante ON (nome ASC)

O script acima cria um índice não agrupado na coluna “nome” da tabela do aluno. O índice é classificado por nome em ordem crescente. Como dissemos anteriormente, os dados e o índice da tabela serão armazenados em locais diferentes. Os registros da tabela serão classificados por um índice agrupado, se houver. O índice será classificado de acordo com sua definição e armazenado separadamente Da mesa.

Dados da tabela do aluno:

IX_tblStudent_Name Dados do índice

nome Endereço da linha
Alan Endereço da linha
Elis Endereço da linha
Jolly Endereço da linha
Jon Endereço da linha
Joseph Endereço da linha
Kate Endereço da linha
Laura Endereço da linha
Ratos Endereço da linha
Sara Endereço da linha
Wise Endereço da linha

Aviso , aqui no índice, cada linha possui uma coluna que armazena o endereço da linha à qual o nome pertence. Portanto, se uma consulta for emitida para recuperar o gênero e o DOB do aluno chamado “Jon”, o banco de dados primeiro pesquisará o nome “Jon” dentro do índice. Em seguida, ele lerá o endereço da linha de “Jon” e irá diretamente para essa linha na tabela “aluno” para buscar o gênero e o DOB de Jon.

Conclusão

Da discussão encontramos as seguintes diferenças entre índices agrupados e não agrupados.

  1. Só pode haver um índice agrupado por tabela. No entanto, você pode criar vários índices não agrupados em uma única tabela.
  2. Índices agrupados somente classificam tabelas. Portanto, eles não consomem armazenamento extra. Os índices não agrupados são armazenados em um local separado da tabela real, reivindicando mais espaço de armazenamento.
  3. Os índices agrupados são mais rápidos do que os índices não agrupados, pois não envolvem nenhuma etapa de pesquisa extra.

Outros excelentes artigos de Ben

Diferença entre identidade & Sequência no SQL Server

Qual é a diferença entre índices agrupados e não agrupados no SQL Server?

  • Autor
  • Postagens recentes
Ben Richardson dirige a Acuity Training, um provedor líder de treinamento em SQL no Reino Unido. Ele oferece uma gama completa de treinamento em SQL, desde cursos introdutórios até administração avançada e treinamento de data warehouse – veja aqui para mais detalhes. A Acuity possui escritórios em Londres e Guildford, Surrey. Ele também faz blogs ocasionalmente no blog da Acuity
Veja todas as postagens de Ben Richardson

Postagens mais recentes de Ben Richardson (ver todos)
  • Power BI: gráficos em cascata e elementos visuais combinados – 19 de janeiro de 2021
  • Power BI : Formatação condicional e cores de dados em ação – 14 de janeiro de 2021
  • Power BI: Importando dados do SQL Server e MySQL – 12 de janeiro de 2021

573.279 visualizações

© 2021 Quest Software Inc. TODOS OS DIREITOS RESERVADOS. | GDPR | Termos de uso | Privacidade

Articles
Previous Post

Principais universidades onde você pode estudar contabilidade e finanças

Next Post

9 cães com olhos azuis que irão hipnotizar você

Deixe uma resposta Cancelar resposta

Artigos recentes

  • As melhores escolas de fotografia do mundo, 2020
  • Cidadãos soberanos levam sua filosofia antigovernamental para as estradas
  • Guia de custos de reparo de estuque
  • Muckrakers (Português)
  • Oncologia de precisão

Arquivo

  • Fevereiro 2021
  • Janeiro 2021
  • Dezembro 2020
  • Novembro 2020
  • Outubro 2020
  • Setembro 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.