Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Cover image for Schemas em SQL: Indexes e B+ trees
Alexandre
Alexandre

Posted on

     

Schemas em SQL: Indexes e B+ trees

Indexes e B+ trees qual será a relação dessa engraçada estrutura de dados com nossos queridos indexes do banco?

Conteúdo

1 Prólogo

O que sãoindexes e como eles são usados paraoptimizar buscas? quantas vezes já não adicionamos indexes em colunas de tabelas com milhares de registros e magicamente as queries caíram de alguns segundos para milissegundos, nunca foi magica e simComputer Science.

2. O que são indexes

Index são uma estrutura separada da estrutura dos registros tabela, sendo feita umacópia de uma parte dos seus dados, que servem como um ponteiro para acessar um registro específico.

Quando pensamos em criarindex existe um conceito que podemos seguir"As many as you need, As few as you can get away with", em outras palavras, você deve criar índices suficientes paraacelerar as consultas e melhorar o desempenho, mas não deve criar muitos índices desnecessários, pois isso podeaumentar o espaço de armazenamento e a sobrecarga inserções no banco de dados, já que sempre que um registro for inserido vão ser criados também osindexes existentes.

Então como sei quais index criar? Para criar seus indexes é preciso olhar paraqueries que pretende executar, para montar um bomschema olhamos para os dados que vamos armazenar, já para bonsindexes olhamos para asqueries estamos executando ou pretendemos executar.

3. B Tree e B+ Tree

Como foi dito os indexes são partes dos seus dados armazenados em uma estrutura diferente, essa estrutura é aB+Tree, antes de entendermos ela precisamos compreender aB Tree.

B Tree é uma estrutura não lineares diferentes de umArray, que somente podemos ir para frente e para trás com as árvores podemos navegar para níveis e subníveis dentro dela.

Image description

AB Tree diferente aBinary Tree permite que armazenemos mais de um valor por nó, como na imagem de exemplo onde o primeiro nó tem 2 valores20 e o40 permitindo que tenhamos um bloco de valores em cada nó que recebem o nome de página.

B+tree é a estrutura de dados que está por trás dasbuscas optimizadas que o banco faz, é uma estrutura derivada dasBTrees, mas com uma forma diferente de armazenar suas chaves de uma maneira que o processamento sequencial e aleatório de chaves fossem eficientes, sendo bastante usadas embancos de dados como MYSQL esistemas de arquivo como FTP.

Image description

A principal diferença de estrutura das duas é que aB+ os dados são armazenados apenas nas folhas(Nós finais, que não tem filhos), e seus nós internosarmazenam ponteiros para os filhos e suas folhas são umalinked list facilitando assim uma busca sequencial de valores se adequando bem melhor para o contexto de bancos de dados, já aB Tree é mais versátil permitindo um uso em uma variedade maior de contextos.

4. Prática

Vamos observar como uma query usa index para encontrar os dados e como seria essa mesma busca se não usássemos os index.

SELECT * FROM users;  EXPLAIN SELECT * FROM users WHERE name='Virux';
Enter fullscreen modeExit fullscreen mode

Image description

Como o SQL fez para encontrar umuser baseado no nossowhere ?

Sem um índice, o MySQL vai ler toda a tabela do início ao fim encontrando os valores desejados, conseguimos comprovar isso observando valorall no campotype que oEXPLAIN nos retorna, ou seja, quanto maior a tabela mais lenta a busca, comoVirux é o registro 9 ele precisou ler 8 registros até encontrar o desejado.

Executando isso o SQL vai criar um index para esse campo

CREATEINDEXidx_nameONusers(name(255));
Enter fullscreen modeExit fullscreen mode

Agora se a colunaname tiver um index executando a mesma busca será feita de uma forma mais optimizada, buscando na estrutura daB+Tree que o mysql montou com os seus dados, conseguimos identificar isso com o valorref no campotype que oEXAPLAIN nos retorna.

Podemos encontrar esse registro com somente3 etapas.

Image description

5. Conclusão

Com isso podemos concluir que buscar usandoindex são bem mais optimizadas, pois são feitas em uma estrutura de dados separada da sua tabela chamadaB+Tree, mas precisamos criar nossos index com cuidado pensando nas queries que pretendemos executar, pois eles afetam diretamente a desempenho das inserções além de aumentar o espaço de armazenamento.

6. Referências

B+Tree Wiki
B+Tree Vizualize
Doc do mysql sobre index

Top comments(2)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss
CollapseExpand
 
girordo profile image
Tarcísio Giroldo
BSc Biomedical Informatics@Sao Paulo University. Frontend, functional programming and best practices, plants and mech keyboards are my interests
  • Education
    Bsc Biomedical Informatics at Universidade de São Paulo
  • Work
    Senior Software Engineer
  • Joined

Muito bom seu artigo meu amigo!

CollapseExpand
 
bronen profile image
BRonen
Lorem Ipsum

Image description

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

  • Joined

More fromAlexandre

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp