Database
 sql >> Base de Dados >  >> RDS >> Database

Como funciona a indexação

O que a indexação faz?


A indexação é a maneira de obter uma tabela não ordenada em uma ordem que maximizará a eficiência da consulta durante a pesquisa.

Quando uma tabela não é indexada, a ordem das linhas provavelmente não será discernível pela consulta como otimizada de forma alguma e, portanto, sua consulta terá que pesquisar as linhas linearmente. Em outras palavras, as consultas terão que pesquisar em todas as linhas para encontrar as linhas que correspondem às condições. Como você pode imaginar, isso pode levar muito tempo. Olhar através de cada linha não é muito eficiente.

Por exemplo, a tabela abaixo representa uma tabela em uma fonte de dados fictícia, que é completamente desordenada.
company_id unidade custo_unidade
10 12 1,15
12 12 1,05
14 18 1,31
18 18 1,34
11 24 1,15
16 12 1,31
10 12 1,15
12 24 1.3
18 6 1,34
18 12 1,35
14 12 1,95
21 18 1,36
12 12 1,05
20 6 1,31
18 18 1,34
11 24 1,15
14 24 1,05

Se fôssemos executar a seguinte consulta:
SELECT
	company_id,
	units,
	unit_cost
FROM
	index_test
WHERE
	company_id = 18

O banco de dados teria que pesquisar todas as 17 linhas na ordem em que aparecem na tabela, de cima para baixo, uma de cada vez. Portanto, para pesquisar todas as possíveis instâncias do company_id número 18, o banco de dados deve procurar em toda a tabela todas as aparências de 18 no company_id coluna.

Isso só consumirá cada vez mais tempo à medida que o tamanho da tabela aumentar. À medida que a sofisticação dos dados aumenta, o que pode eventualmente acontecer é que uma tabela com um bilhão de linhas seja unida a outra tabela com um bilhão de linhas; a consulta agora precisa pesquisar o dobro da quantidade de linhas, custando o dobro do tempo.

Você pode ver como isso se torna problemático em nosso mundo sempre saturado de dados. As tabelas aumentam de tamanho e a pesquisa aumenta o tempo de execução.

Consultar uma tabela não indexada, se apresentada visualmente, ficaria assim:



O que a indexação faz é configurar a coluna em que as condições de pesquisa estão em uma ordem de classificação para ajudar a otimizar o desempenho da consulta.

Com um índice no company_id coluna, a tabela seria, essencialmente, “se parecer” com isto:
company_id unidade custo_unidade
10 12 1,15
10 12 1,15
11 24 1,15
11 24 1,15
12 12 1,05
12 24 1.3
12 12 1,05
14 18 1,31
14 12 1,95
14 24 1,05
16 12 1,31
18 18 1,34
18 6 1,34
18 12 1,35
18 18 1,34
20 6 1,31
21 18 1,36

Agora, o banco de dados pode pesquisar por company_id número 18 e retornar todas as colunas solicitadas para essa linha, em seguida, passe para a próxima linha. Se o comapny_id da próxima linha número também for 18, então ele retornará todas as colunas solicitadas na consulta. Se o company_id da próxima linha for 20, a consulta sabe que deve parar de pesquisar e a consulta terminará.

Como funciona a indexação?


Na realidade, a tabela de banco de dados não se reordena toda vez que as condições de consulta mudam para otimizar o desempenho da consulta:isso seria irreal. Na verdade, o que acontece é que o índice faz com que o banco de dados crie uma estrutura de dados. O tipo de estrutura de dados é muito provavelmente uma B-Tree. Embora as vantagens do B-Tree sejam numerosas, a principal vantagem para nossos propósitos é que ele é classificável. Quando a estrutura de dados é classificada em ordem, torna nossa busca mais eficiente pelas razões óbvias que apontamos acima.

Quando o índice cria uma estrutura de dados em uma coluna específica, é importante observar que nenhuma outra coluna é armazenada na estrutura de dados. Nossa estrutura de dados para a tabela acima conterá apenas o company_id números. Unidades e unit_cost não será mantido na estrutura de dados.

Como o banco de dados sabe quais outros campos da tabela devem ser retornados?


Os índices de banco de dados também armazenam ponteiros que são simplesmente informações de referência para a localização das informações adicionais na memória. Basicamente, o índice contém o company_id e o endereço residencial dessa linha específica no disco de memória. Na verdade, o índice ficará assim:
company_id ponteiro
10 _123
10 _129
11 _127
11 _138
12 _124
12 _130
12 _135
14 _125
14 _131
14 _133
16 _128
18 _126
18 _131
18 _132
18 _137
20 _136
21 _134

Com esse índice, a consulta pode pesquisar apenas as linhas no company_id coluna que tem 18 e, em seguida, usando o ponteiro, pode entrar na tabela para encontrar a linha específica onde esse ponteiro reside. A consulta pode então entrar na tabela para recuperar os campos das colunas solicitadas para as linhas que atendem às condições.

Se a pesquisa fosse apresentada visualmente, ficaria assim:


Recapitulação

  • A indexação adiciona uma estrutura de dados com colunas para as condições de pesquisa e um ponteiro
  • O ponteiro é o endereço no disco de memória da linha com o restante das informações
  • A estrutura de dados do índice é classificada para otimizar a eficiência da consulta
  • A consulta procura a linha específica no índice; o índice se refere ao ponteiro que encontrará o restante das informações.
  • O índice reduz o número de linhas que a consulta precisa pesquisar de 17 para 4.