Qual é a diferença entre a indexação btree e rtree?

36

Percebi no MySQLWorkbench que você pode escolher como armazenar seus índices antes de avançar na engenharia de seu design. Os tipos de armazenamento são:

  1. BTREE
  2. RTREE
  3. JOGO DA VELHA

Pesquisando isso, encontrei algumas informações que estavam praticamente na minha cabeça, então estou procurando informações práticas sobre qual é a diferença entre elas e / ou por que você deve escolher uma sobre a outra.

Além disso, como nunca escolhi um tipo de armazenamento antes, assumo que o MySQL esteja escolhendo um tipo de armazenamento padrão (BTREE?)


fonte

Respostas:

51

BTree

BTree (na verdade B * Tree) é um mapa eficiente de valores-chave ordenados. Significado:

  • dada a chave, um índice BTree pode encontrar rapidamente um registro,
  • um BTree pode ser digitalizado em ordem.
  • também é fácil buscar todas as chaves (e registros) dentro de um intervalo.

por exemplo, "todos os eventos entre 9h e 17h", "sobrenomes que começam com 'R'"

RTree

RTree é o spatial indexque significa que ele pode identificar rapidamente closevalores em 2 ou mais dimensões. É usado em bancos de dados geográficos para consultas como:

todos os pontos dentro de X metros de (x, y)

Jogo da velha

Hash é um mapa não ordenado de valores-chave. É ainda mais eficiente que um BTree: em O(1)vez de O(log n).

Mas ele não tem nenhum conceito de ordem, portanto não pode ser usado para operações de classificação ou para buscar intervalos.

Como uma observação lateral, originalmente, o MySQL permitia apenas índices Hash em MEMORYtabelas; mas não tenho certeza se isso foi alterado ao longo dos anos.

Javier
fonte
O MySQL suporta Rtrees?
Pacerier
2
sim, eles são chamados de índice espacial ( dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html )
Javier
Legal, obrigado =) Existem outras estruturas além dessas 3 ou estruturas planejadas no futuro próximo?
Pacerier 6/07/12
Tabelas de memória suportam índices btree bem
Amareswar
@Amareswar, certo. Talvez minha resposta possa ser lida nos dois sentidos, mas o que eu quis dizer foi que os índices HASH eram permitidos apenas nas tabelas MEMORY, não nas tabelas 'normais'.
Javier