Tipos de índice no Microsoft SQL Server

Tipos de índice no Microsoft SQL Server
Um índice nos ajuda a procurar um registro específico no banco de dados. Um dos principais componentes dos recursos de gerenciamento de dados do SQL Server é o suporte à indexação, que permite aos desenvolvedores e administradores otimizar o desempenho de suas consultas e melhorar a eficiência geral de seus bancos de dados.

Discutiremos as várias categorias de índices no Microsoft SQL Server. Os principais tipos de índices são: índices em cluster, índices não agrupados, índices Btree e índices exclusivos.

Tipos de índices no servidor Microsoft SQL

Índice em cluster

Um índice agrupado define o arranjo físico real dos dados dentro de uma tabela. Cada tabela no servidor SQL pode ter apenas um índice em cluster, e o índice deve ser criado em uma coluna exclusiva e não nula ou conjunto de colunas. Como um índice em cluster determina o layout físico de uma tabela, é frequentemente usado para tabelas que são frequentemente pesquisadas com base em sua chave primária ou em outros valores únicos.

Vamos primeiro criar uma tabela e inserir os valores nela usando os seguintes comandos SQL:

Insira nos clientes (Customer_id, Customer_Name, Customer_Email, Customer_phone)
Valores (1, 'Somdeb Nath', '[email protected] ',' 3532626 '),
(2, 'Jina Pal', '[email protected] ',' 5555678 '),
(3, 'Arnita Guha', '[email protected] ',' 4449912 '),
(4, 'Krishna Kumar', '[email protected] ',' 716781497 ');

Vejamos um exemplo de um índice agrupado. Para criar um índice em cluster na coluna "Customer_Id", podemos usar a seguinte consulta SQL:

Crie índice clusterado idx_customers_customer_name nos clientes (cliente_name);

Isso cria um índice agrupado na coluna Customer_name, onde os dados da tabela são fisicamente ordenados com base nos valores na coluna Customer_name.

Para buscar todos os clientes cujo nome começa com a letra "A", podemos usar a seguinte consulta SQL:

Selecione *
De clientes
Onde customer_name como 'a%'
Pedido por cliente_name;

Saída:

Customer_Id Customer_Name Customer_Email Customer_phone
1 3 Arnita Guha [email protected] 4449912

Índice não agrupado

É um tipo de índice que não afeta a ordem física dos dados em uma tabela. Um índice não agrupado produz uma estrutura de dados independente que armazena a chave do índice e o ponteiro da linha de dados associados na tabela. Isso permite que as consultas localizem rapidamente as linhas de dados relevantes com base nos valores no índice. Ao contrário dos índices agrupados, as tabelas no servidor SQL podem ter vários índices não agrupados, e o índice pode ser criado em qualquer coluna ou conjunto de colunas na tabela.

Um exemplo de um índice não agrupado é o seguinte:

Crie índice não clusterado idx_customer_email
Nos clientes (client_email);

Isso cria um índice não agrupado na coluna "Customer_Email", onde os dados da tabela permanecem fisicamente não ordenados, mas o índice armazena uma cópia classificada dos dados na coluna "Customer_Email".

Para buscar todos os clientes cujo endereço de e -mail inclui o “Gmail.com ”domínio, podemos usar a seguinte consulta SQL:

Selecione *
De clientes
Onde customer_email como '%gmail.com%'
Pedido por cliente_name;

Saída:

Customer_Id Customer_Name Customer_Email Customer_phone

Aqui, nenhum cliente tem um email que contém o “Gmail.com ”domínio, então o campo de saída está vazio.

Índice Btree

Um índice Btree é uma maneira de organizar os dados em uma estrutura que se assemelha a uma árvore. Cada nó na árvore contém uma variedade de valores -chave, e cada nó foliar contém um ponteiro para a linha de dados correspondente. Os índices de Btree são comumente usados ​​no servidor SQL porque permitem pesquisa e classificação eficientes de grandes quantidades de dados. Eles são especialmente úteis para consultas que envolvem pesquisas de alcance ou operações de classificação. Por exemplo: salários, números de telefone, etc.

Um exemplo de criação de um índice btree na coluna "Customer_phone" é o seguinte:

Crie índice idx_customer_phone
Nos clientes (cliente_phone);

Isso cria um índice B-Tree na coluna "Customer_phone", onde os dados no índice são armazenados em uma estrutura semelhante a uma árvore, com cada nó contendo uma variedade de valores e ponteiros para os outros nós.

Agora, queremos recuperar todos os clientes cujo número de telefone começa com o código de área de "555" usando a seguinte consulta SQL:

Selecione *
De clientes
Onde customer_phone como '555%'
Pedido por cliente_name;

Saída:

Customer_Id Customer_Name Customer_Email Customer_phone
1 2 Jina Pal [email protected] 5555678

Índice exclusivo

É um tipo de índice que garante que não há duas linhas em uma tabela o mesmo valor -chave. Isso pode ser útil para impor a integridade dos dados e impedir os registros duplicados em uma tabela.

Um exemplo de criação de um índice exclusivo na coluna "Customer_Email" é o seguinte:

Crie índice IDX_CUSTOMER_EMAIL_NEW
Nos clientes (client_email);

Isso cria um índice exclusivo na coluna "Customer_Email", onde o índice aplica uma restrição que garante que não há duas linhas na tabela que possam ter o mesmo valor na coluna "Customer_Email".

Agora, insira um novo cliente na mesa com o “[email protected] ”e -mail e recupere -o usando a seguinte consulta SQL:

Insira nos clientes (Customer_id, Customer_Name, Customer_Email, Customer_phone)
Valores (5, 'Lili Doe', '[email protected] ',' 333-333-3333 ');
Selecione *
De clientes em que client_email como 'L%';

Saída:

Customer_Id Customer_Name Customer_Email Customer_phone
1 5 Lili Doe [email protected] 333-333-3333

Conclusão

Os índices desempenham um papel importante na otimização do desempenho dos bancos de dados do SQL Server. Compreender os diferentes tipos de índices pode ajudar os administradores do banco de dados a escolher o tipo de índice mais apropriado para seus aplicativos. Ao criar e manter efetivamente a manutenção dos índices, as empresas podem garantir que seus bancos de dados estejam executando com eficiência, permitindo que eles tomem decisões orientadas a dados e forneçam um melhor serviço aos seus clientes.