Considerando o PostgreSQL como gerenciador de banco de dado...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa Correta: C - GIN e GiST
Para responder corretamente essa questão, é necessário ter conhecimento sobre os tipos de índices disponíveis no PostgreSQL e qual deles fornece melhor desempenho em buscas de texto completo.
O PostgreSQL é um poderoso sistema de gerenciamento de banco de dados que oferece suporte a vários tipos de índices para otimizar diferentes tipos de consultas. Entre esses, os índices GIN (Generalized Inverted Index) e GiST (Generalized Search Tree) são especificamente eficazes para buscas de texto completo.
GIN: O índice GIN é projetado para lidar com conjuntos de dados onde uma coluna contém muitos valores distintos, como arrays e documentos de texto. É altamente eficiente para consultas que utilizam operadores de teste de pertinência, como buscas de texto completo.
GiST: O índice GiST é usado para uma variedade de propósitos, incluindo buscas de texto completo, mas também pode ser utilizado para dados espaciais e outros tipos de dados complexos. Ele permite a criação de índices personalizados para tipos de dados não convencionais.
Com base no exposto, fica claro que a alternativa correta é a C - GIN e GiST.
Justificativa para as alternativas incorretas:
A - GiST e HASH: Embora o GiST seja eficiente para buscas de texto completo, o índice HASH é mais adequado para igualdade simples e não para buscas de texto completo.
B - B-Tree e GIN: O B-Tree é o índice padrão no PostgreSQL e eficiente para uma ampla gama de operações, mas não é tão eficaz quanto o GIN ou GiST para buscas de texto completo.
D - GiST e B-Tree: Similar à alternativa B, o B-Tree não é o mais apropriado para buscas de texto completo, embora o GiST seja eficiente.
E - BRIN e GIN: O índice BRIN (Block Range INdex) é eficiente para grandes volumes de dados onde as colunas possuem valores sequencialmente ordenados, mas não é ideal para buscas de texto completo. O GIN, por outro lado, é adequado, mas a combinação BRIN e GIN não é a mais eficiente para o propósito de buscas de texto completo.
Portanto, a alternativa correta para a questão é C - GIN e GiST, pois esses tipos de índices fornecem o melhor desempenho na aceleração de pesquisas de texto completo no PostgreSQL.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
gabarito C
GIN e GiST
B-Tree
O B-tree, ou alguma variação dele, é o mais comum em todos os sistemas de banco de dados. Ele é muito eficiente para quase todos os casos comuns de uso. É uma árvore balanceada que permite todos os tipos de acesso (leitura, inserção remoção, em qualquer lugar) em tempo O(log n) (é um pouco mais complicado que isso, mas assim dá um ideia), que é muito rápido sempre, com volume muito grande ou muito pequeno de dados, mas importa mesmo quando é grande. É razoavelmente eficiente em espaço e mantém os dados ordenados, permitindo a leitura sequencial e de faixas eficientemente.
Hash
Nos casos onde não precisa da ordem ou da busca sequencial e as chaves são únicas (em que o programador garante isto, o índice não consegue), evitam colisão e possui grande volume de dados, o índice pode ser mais eficiente se usar uma função de cálculo de hash. Elas têm tempo O(1). Mas isso não quer dizer claramente mais rapidez. O tempo de cálculo da função pode ser maior que algumas iterações em uma árvore binária (e costumam haver poucas). Não costuma funcionar bem em disco ou outro armazenamento secundário.
A estrutura de hash ainda pode ter algumas dificuldades quando há colisões e buscas lineares (O(n)) são necessárias (ainda que raras, a não ser que as chaves não sejam únicas). Mas também pode-se "reclamar" de perda de tempo extra no B-tree quando necessita um rebalanceamento embora isto ocorra em circunstâncias mais específicas. Em todos os casos depende do algoritmo usado e o padrão de dados.
Existem casos, mas é raro, ter ganho expressivo por sua utilização. Pode haver ganhos em certos tipos de JOIN muito complexos. Só testando para ter certeza se vale a pena.
Ele não é crash-safe, nem é replicado, o que inviabiliza mais casos.
GIN
O GIN (Generalized Inverted Index) permite que uma chave possua vários valores, ou seja, que aponte para várias linhas na tabela de dados. Isto é importante quando a mesma chave pode estar presente em vários itens de dados. Em alguns casos ter um índice assim (B-tree permite isto também) pode ser mais eficiente em espaço e tempo de acesso. Não espere ganhos miraculosos.
Um bom uso é para busca de textos livres (indicar onde determinas palavras estão presentes.
Outro uso é quando um tipo de dados específico criado pelo usuário (programador) no banco tem uma característica de multiplicidade.
De uma certa forma podemos considerar um índice mais baixo nível. Algo quase interno.
GiST
O GiST (Generalized Search Tree) é uma forma mais abstrata, mais interna, onde podem ser implementadas várias metodologias de acesso. Ela é uma árvore balanceada, mas não possui muitas regras. Estas devem ser especificadas em um nível mais alto, provavelmente para algum tipo específico criado pelo usuário.
No PostgreSQL, os índices mais adequados para acelerar pesquisas de texto completo são os índices **GIN (Generalized Inverted Index)** e **GiST (Generalized Search Tree)**.
- **GIN**: É especialmente eficiente para indexação de grandes quantidades de texto e permite buscas rápidas em documentos extensos.
- **GiST**: É um índice genérico que também pode ser usado para indexação de texto, oferecendo flexibilidade e suporte para tipos de dados variados.
Portanto, a opção correta que apresenta os tipos de índices com melhor desempenho na aceleração de pesquisas de texto completo no PostgreSQL é:
**GIN e GiST**.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo