MySQL (análise de InnoDB): algoritmo de hash e índice adaptativo de hash

Um, algoritmo de hash

  • O algoritmo de hash é um algoritmo comum, a complexidade do tempo é O (1) e não existe apenas no índice, a estrutura do banco de dados existe em cada aplicativo de banco de dados

 

Em segundo lugar, a tabela de hash

  • A tabela hash também é chamada de tabela hash, que é melhorada da tabela de endereçamento direto. Primeiro, olhe para a tabela de endereçamento direto. Quando o U global da palavra-chave é relativamente pequeno, o endereçamento direto é uma técnica simples e eficaz. Para ingressar em uma aplicação, é utilizado um conjunto dinâmico, no qual cada elemento possui uma palavra-chave retirada do U = {0,1, ..., m-1} global. Suponha também que não há dois elementos com a mesma palavra-chave
  • Uma matriz (ou seja, tabela de endereçamento direto) T [0 ... m-1] é usada para representar o conjunto dinâmico, onde cada posição (ou slot ou balde) corresponde a uma chave no U global. A Figura 5-38 ilustra esse problema. O slot K aponta para um elemento do conjunto cuja chave é k. Se o conjunto não tiver nenhum elemento da chave k, então T [k] = NULL

  • Existe um problema óbvio com o endereçamento direto. Se o domínio U for muito grande, dentro da limitação da capacidade disponível de um computador típico, é um pouco impraticável, ou mesmo impossível, armazenar uma tabela T de tamanho U na máquina. Se o conjunto real de palavras-chave K a ser armazenado for relativamente pequeno em relação a U, a maior parte do espaço alocado para T será desperdiçado
  • Portanto, a tabela hash aparece. No modo hash, o elemento está em h (k), ou seja, a função hash h é usada para calcular a posição do slot de acordo com a tecla k, e a função h mapeia o campo-chave U à função hash h. No slot da tabela grega T [0 ... m-1], conforme mostrado na figura abaixo

 

 

  • A tecnologia da tabela de hash resolve os problemas encontrados pelo endereçamento direto muito bem. Mas ainda há um pequeno problema. Conforme mostrado na figura acima, duas palavras-chave podem ser mapeadas para o mesmo slot. Essa situação é geralmente chamada de colisão. A tecnologia de resolução de colisão mais simples é geralmente usada no banco de dados.Esta tecnologia é chamada de método de link.
  • No método de vinculação, todos os elementos com hash no mesmo slot são colocados em uma lista vinculada.Como mostrado na figura abaixo, há um ponteiro no slot j, que aponta para o topo da lista vinculada para todos os elementos com hash para j. Se não houver tal elemento, então j é NULL

 

 

  • A última coisa a considerar é a função hash. A função hash h deve ser capaz de fazer o hash bem. O melhor caso é evitar colisões. Mesmo que não possa ser evitada, a colisão deve ser causada sob o menor Chengdu. De um modo geral, as palavras-chave são convertidas em números naturais e, em seguida, implementadas por meio de hashing de divisão, hashing de multiplicação ou hashing global. O método de disparar hashing é geralmente usado no banco de dados
  • No algoritmo de hash divisional da função hash, tomando o resto de k dividido por m, a chave k é mapeada para um dos m slots, ou seja, a função hash é

 

Terceiro, o algoritmo hash no mecanismo de armazenamento InnoDB

  • O InnoDB usa um algoritmo de hash para pesquisar o dicionário , seu mecanismo de conflito usa um método de lista vinculada e a função de hash usa um método de hash de divisão

Pegue a página de buffer no InnoDB como um exemplo

  • Para a tabela hash da página de buffer, a página Página no pool de buffer tem um ponteiro de cadeia, que aponta para a página com o mesmo valor de função de hash . Para o hash dividido, o valor de m é um número primo ligeiramente maior do que 2 vezes o número de páginas do buffer pool
  • Por exemplo, se o tamanho do parâmetro atual innodb_buffer_pool_size for 10M, haverá um total de 640 páginas de 16 KB:
    • Para a tabela hash da memória da página do conjunto de buffers, 640 * 2 = 1280 slots precisam ser alocados, mas como 1280 não é um número primo, um número primo um pouco maior que 1280 precisa ser usado, que deve ser 1399, portanto 1399 será alocado na inicialização A tabela de hash do slot, usada para hash a página no pool de buffer onde a consulta está localizada
  • Então, como o buffer pool do InnoDB procura as páginas nele? O acima é apenas um algoritmo geral, como converter a página a ser pesquisada em um número natural?
    • Na verdade, é muito simples. O espaço de tabela do InnoDB tem um space_id. O que o usuário deseja consultar deve ser uma página contínua de 16 KB de um espaço de tabela, ou seja, o deslocamento de deslocamento. InnoDB desloca o space_id para a esquerda em 20 bits, então adiciona o space_id e o deslocamento, ou seja, a palavra-chave K = space_id << 2 + space_id + offset, e então o hash em cada slot por divisão

Quatro, índice de hash adaptativo

  • O índice hash adaptável adota a implementação da tabela hash discutida anteriormente. A diferença é que ele só é criado e usado pelo próprio banco de dados , e o próprio DBA não pode intervir nele
  • Uma vez que o índice hash é mapeado para uma tabela hash pela função hash, é muito rápido procurar o tipo de dicionário
  • Por meio do comando "SHOW ENGINE INNODB STATUS", você pode visualizar o uso atual do índice hash adaptativo, por exemplo :
    • Você pode ver o tamanho e o uso do índice de hash adaptativo e o uso de pesquisas de índice de hash adaptativo por segundo
    • hash pesquisado / se pesquisas não hash / s: representa o uso e eficiência após o índice hash

  • O índice hash adaptável é controlado pelo próprio mecanismo de armazenamento InnoDB, então as informações aqui são apenas para referência
  • Nota: o índice hash só pode ser usado para pesquisar consultas equivalentes. Para pesquisa de intervalo, o índice hash não pode ser usado
-- 下面的查询语句可以使用自适应哈希索引
select * from table where index_col='xxx';

innodb_adaptive_hash_index 参数

  • Se o índice de hash adaptativo está habilitado pode ser controlado por este parâmetro
  • O padrão é ativado

 

 

 

Acho que você gosta

Origin blog.csdn.net/m0_46405589/article/details/113815441
Recomendado
Clasificación