paint-brush
Uma visão geral da indexação de banco de dados para iniciantespor@pragativerma
5,320 leituras
5,320 leituras

Uma visão geral da indexação de banco de dados para iniciantes

por Pragati Verma7m2022/09/09
Read on Terminal Reader
Read this story w/o Javascript

Muito longo; Para ler

Um índice de banco de dados permite que uma consulta recupere dados de um banco de dados de maneira eficiente. A indexação é uma maneira de colocar uma tabela não ordenada em uma ordem que maximize a eficiência ao procurar um registro. Os índices podem estar relacionados a tabelas específicas e consistem em uma ou mais chaves. Uma tabela pode ter vários índices criados a partir dela. O banco de dados teria que pesquisar todos os 17 registros na ordem em que aparecem na tabela, de cima para baixo, um de cada vez, para procurar todas as instâncias potenciais de `company_id` como 18. Isso não é o ideal e pode pode ser um problema ao olhar dentro de uma tabela de banco de dados com grande quantidade de dados.
featured image - Uma visão geral da indexação de banco de dados para iniciantes
Pragati Verma HackerNoon profile picture
0-item


Indexação de banco de dados é a forma mais comum conhecida e utilizada por desenvolvedores de back-end para otimizar consultas de banco de dados. Neste artigo, discutiremos detalhadamente sobre indexação de banco de dados.


O que é um índice de banco de dados?

Um índice de banco de dados permite que uma consulta recupere dados de um banco de dados de maneira eficiente. Em palavras mais simples, a indexação é uma maneira de colocar uma tabela não ordenada em uma ordem que maximize a eficiência ao procurar um registro.


Os índices podem estar relacionados a tabelas específicas e consistem em uma ou mais chaves. Além disso, uma tabela pode ter vários índices criados a partir dela.


Quando uma tabela de banco de dados não estiver indexada, não haverá uma ordem clara das linhas, portanto, para atender qualquer consulta, ela precisará pesquisar as linhas linearmente, ou seja, a consulta terá que pesquisar cada linha para encontrar as linhas com a condição correspondente. Como você pode imaginar, isso não é o ideal e pode ser um problema ao olhar dentro de uma tabela de banco de dados com grande quantidade de dados.


Por exemplo, temos uma tabela conforme abaixo:

ID DA EMPRESA

UNIDADE

CUSTO UNITÁRIO

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


E então, queremos executar uma consulta da seguinte forma:


 SELECT company_id, units, unit_cost FROM index_test WHERE company_id = 18


Nesse caso específico, o banco de dados teria que pesquisar todos os 17 registros na ordem em que aparecem na tabela, de cima para baixo, um de cada vez, para procurar todas as instâncias potenciais de company_id como 18.


Isso ficará cada vez mais demorado conforme o tamanho da tabela aumenta. Como a indexação pode ajudar aqui? A indexação pode nos ajudar a configurar a coluna com a condição de pesquisa em ( company_id neste caso) de maneira classificada para otimizar o desempenho da consulta.


Com um índice na coluna company_id , a tabela ficaria assim:


ID DA EMPRESA

UNIDADE

CUSTO UNITÁRIO

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 simplesmente procurar por company_id igual a 18 e retornar todas as colunas solicitadas para essa linha e, em seguida, passar para a próxima linha. Se a próxima linha também tiver o company_id como 18 novamente, ele também retornará as colunas de solicitação para esta linha, mas se a próxima linha tiver o company_id como 18, o banco de dados saberá que pode interromper a pesquisa aqui e concluir a resposta .


Esta foi uma explicação bastante simples sobre o que são índices de banco de dados e o que eles podem fazer, mas há muito mais acontecendo no processo. Vamos dar uma olhada mais profunda em como a indexação funciona.


Como funciona a indexação de banco de dados?

Na realidade, a tabela do banco de dados não se reordena toda vez que as condições da consulta são alteradas para otimizar o desempenho do banco de dados, mas o que realmente acontece é que o índice faz com que o banco de dados crie uma estrutura de dados separada que deve ser facilmente classificável.


É importante observar que quando um índice é criado em uma coluna em um banco de dados, ele cria uma estrutura de dados nessa coluna específica e nenhuma outra coluna é armazenada nessa estrutura de dados. Por exemplo, no exemplo acima, nossa estrutura de dados conterá apenas o company_id e nenhuma outra coluna, como unit ou unit_cost .


Mas uma questão legítima surge aqui - como o banco de dados sabe quais outros campos na tabela devem ser retornados para uma consulta. Vamos tentar entender como.


Estrutura de um índice de banco de dados


Índices de banco de dados armazenam ponteiros para simplesmente referenciar informações para a localização das informações adicionais na memória. Em outras palavras, o índice contém o company_id e o endereço dessa linha específica na memória. Neste exemplo, o índice do banco de dados será mais ou menos assim:


ID DA EMPRESA

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 verificar as linhas da coluna company_id que possuem 18 como valor e, usando o ponteiro, pode encontrar as informações relacionadas a esse registro.


Quais estruturas de dados são usadas para indexação?

Tendo entendido o que esperamos do índice, vamos dar uma olhada nas estruturas de dados comuns que podem ser usadas para indexação de banco de dados:


Árvores B

As árvores B são as estruturas de dados de índice mais usadas porque são rápidas para pesquisas, exclusões e inserções. Todas essas operações são possíveis em tempo logarítmico e os dados contidos em uma árvore B podem ser classificados facilmente.


Tabelas de hash

Índices de hash são comumente usados para descrever índices que utilizam tabelas de hash . Como as tabelas de hash são particularmente eficientes na pesquisa de dados, as consultas que procuram uma correspondência exata podem ser processadas rapidamente. A chave em um índice de hash é o valor da coluna e o valor em uma tabela de hash é uma referência aos dados de linha da tabela.


As tabelas hash, por outro lado, não são estruturas de dados ordenadas; portanto, eles podem ser ineficientes para outros tipos de pesquisas.


R-TreeName

A R-tree é frequentemente usada em bancos de dados espaciais, geralmente usada para indexar informações multidimensionais, como coordenadas geográficas, retângulos, polígonos etc.


Índice de bitmap

Os índices de bitmap são úteis para colunas que possuem um alto número de ocorrências de tais valores, ou seja, colunas com baixa seletividade. Por exemplo, considere uma coluna com valores booleanos.


Quando usar índices

Os índices são projetados para aumentar o desempenho do banco de dados; assim, a indexação pode ser usada sempre que precisarmos melhorar significativamente o desempenho do banco de dados. Quanto mais seu banco de dados se expande, mais provável é que a indexação o beneficie.


No entanto, a primeira e principal coisa a lembrar é que o índice ocupa espaço extra; portanto, quanto maior a tabela, maior o índice. Toda vez que você executar uma operação de adição, remoção ou atualização, a mesma operação também precisará ser executada no índice.


Quando não usar índices

Quando os dados são gravados no banco de dados, a tabela original é atualizada primeiro, seguida por outros índices baseados nessa tabela. Quando uma gravação é feita no banco de dados, os índices ficam inoperantes até que sejam atualizados. Os índices nunca serão funcionais se o banco de dados estiver recebendo gravações continuamente.


É por isso que os índices costumam ser aplicados a bancos de dados em armazéns de dados que obtêm novos dados de forma planejada (fora do horário de pico), em vez de bancos de dados de produção que podem receber novas gravações o tempo todo.


Como criar um índice?

O trecho de código a seguir mostra como criar um índice em uma única coluna em um banco de dados SQL:


 CREATE INDEX name_index ON Employee (Employee_Name);


Se você deseja criar um índice em várias colunas, o comando SQL será mais ou menos assim:


 CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age);


Em geral, um índice deve ser construído em uma tabela somente se os dados na coluna indexada forem acessados com frequência.


Conclusão

Portanto, discutimos a indexação de banco de dados em detalhes neste artigo e também aprendemos sobre as estruturas de dados usadas para implementar a indexação de banco de dados e também quando é aconselhável usar índices e outros.


Para resumir tudo, aqui está um rápido resumo:

  • A indexação de banco de dados pode ajudar a reduzir bastante o tempo das consultas.
  • A indexação inclui uma estrutura de dados com colunas para critérios de pesquisa, bem como um ponteiro.
  • O ponteiro é o endereço no disco de memória da linha que contém as informações restantes.
  • Para melhorar o desempenho da consulta, a estrutura de dados do índice (B-Tree, R-Tree, Hash Table ou um Bitmap) é classificada.
  • A consulta pesquisa o índice para a linha especificada; o índice refere-se ao ponteiro que descobrirá o restante das informações.


Isso é tudo para este artigo. A indexação de banco de dados é um tópico vasto e um pouco complicado, espero que este artigo seja útil para entender os fundamentos do conceito.


Continue lendo!