Fundamentos de indexação. Vamos conversar agora sobre os mecanismos que os bancos de dados apresentam para manipular rapidamente grandes volumes de informação. Nós encontraremos estruturas eficientes com este propósito, que são os índices, que vão reduzir a quantidade de acessos ao disco, seja ele mecânico ou sólido, mas ainda assim uma estrutura mais lenta de acesso aos dados. Vamos lá. Principais gargalos em bancos de dados, nós temos primeiro a ausência de índices, quem aqui nunca fez uma consulta que resultou num full scan da sua tabela ou num full scan da sua coleção, ou seja, varrer cada um dos registros, sejam estes linhas ou documentos, até encontrar o registro desejado, ou até mesmo índices mal projetados, ou seja, índices que não conseguiram executar por completo o seu propósito de encurtar o caminho de acesso ao dado ou simplesmente economizar leituras em disco na recuperação dos dados solicitados pela aplicação. na recuperação dos dados solicitados pela aplicação. Então, aqui nós temos o grande objetivo de encontrar maneiras eficientes de recuperar e manipular os dados, sobretudo num contexto em que o banco de dados está sempre crescendo. Quanto maior a massa de dados, maior o universo vasculhável pelas consultas das nossas aplicações. Portanto, uma estratégia de indexação bem concebida é fundamental para a gente ter eficiência e, consequentemente, ter uma aplicação com uma experiência fluida para os usuários finais. Índice é uma estrutura de dados que acelera essa recuperação, então economiza acesso em disco. E a ideia aqui é justamente a gente eliminar a necessidade de verificar cada um dos registros que nós temos, seja uma linha na tabela ou um documento em uma coleção. ou um documento em uma coleção. Então, aqui a gente tem como semelhante o índice de um livro, onde nós temos palavras-chave junto aos números das páginas que nós vamos encontrar a informação que estamos buscando daquela palavra-chave. Ou seja, não é necessário a gente folhear cada uma das páginas de um livro para alcançar o conteúdo desejado. Nós já vamos e abrimos o livro mais ou menos naquela página que a gente está buscando. Então, esse é o princípio fundamental de um índice. Então, o índice de banco de dados, especificamente, é composto por uma lista ordenada de valores, é composto por uma lista ordenada de valores, com cada valor conectado a ponteiros que levam as páginas de dados aonde esses valores estão persistidos, ou seja, o endereçamento dessa informação em disco. Os índices de banco de dados são constituídos pelas chaves feitas a partir de uma ou mais colunas da tabela ou campos do documento. Geralmente, estes índices são armazenados em uma estrutura de dados específica, que é a árvore B ou B+. Normalmente, o índice é gravado em disco e isso vale para a maioria dos bancos de dados, sejam eles relacionais e não relacionais. Ainda sobre índices de banco de dados, nós vamos encontrar outras estruturas, além da árvore B, suportando esses índices, como o Bitmap e o Hashmap, que são implementações específicas para casos de usos específicos de indexação. específicas para casos de usos específicos de indexação. E ainda, nós vamos perceber que, embora todas essas estruturas de dados fornecem um acesso eficiente, os detalhes de implementação são bem diferentes, são bem distintos. Para bancos de dados relacionais, índices mais comuns são usando um tipo de estrutura de dados chamada árvore B+, que é uma variante da árvore B. Um ponto interessante aqui de comentário é que determinar os índices certos para uma aplicação significa equilibrar respostas rápidas às consultas e ainda levar em consideração cursos de atualização da informação, ou seja, o momento que nós precisamos escrever. Então, o encontro da ciência com a arte, nós temos que equilibrar isso para fornecer a melhor experiência na aplicação. Nós ainda teremos conceitos mais específicos, índices estreitos, são aqueles com menos atributos, então um índice com um único campo ou uma única coluna é um índice estreito, consequentemente economiza espaço em disco e tem uma característica de ser consultas específicas. e tem uma característica de ser consultas específicas. Exemplo, pessoa física tem um atributo identificador que é o CPF. Então, o CPF, com certeza, é um ótimo candidato a ser indexado, que vai caracterizar um índice estreito e é para uma consulta específica. Uma consulta na qual eu sei o CPF da pessoa que eu estou procurando. No outro lado, nós vamos ter índices amplos, ou seja, índices que têm mais atributos, ou sejam mais colunas da tabela, ou mais atributos do nosso documento na coleção, consequentemente, ocupam mais espaço em disco e vai ter um atendimento, uma cobertura a consultas mais sofisticadas, consultas mais amplas. Ainda na linha dos índices, nós vamos entender que os índices também podem ser densos, quando nós temos para cada registro, seja uma linha ou um documento, uma entrada de indexação no nosso índice, então esse índice é um índice denso, ou índices esparços, quando nem toda entrada, nem todo registro, nem toda linha na tabela, nem todo documento, vai gerar uma entrada de índice. Então, geralmente isso é muito comum, índices esparços, quando nós trabalhamos com chaves primárias sequenciais. E aí nós vamos ter índices que vão criar blocos. Então, o registro do número 1 ou 10 tem uma entrada, do 11 ao 20 uma segunda entrada, do 21 ao 30 uma terceira entrada de indexação, e assim consequentemente.