Vlw D+ Dickson! Em quarta-feira, 19 de agosto de 2015, Dickson S. Guedes < [email protected]> escreveu:
> Em 19 de agosto de 2015 12:28, Gerdan Rezende dos Santos > <[email protected] <javascript:;>> escreveu: > > Pessoal, não entendo muito claramente como funcionam os índices GIN e > GIST > > alguém tem uma referencia boa??? > > Li o o manual mas não ficou muito claro... > > Não sei exatamente "o quê" você deseja saber sobre eles, então sendo > um pouco genérico, poderiamos resumir que: > > Basicamente temos indices B-tree que permitem que você busque > registros comparando se A é igual ou não a B, ou se A é menor/maior ou > não a B. > > Vocẽ também tem indices do tipo hash, que só te permitem buscar > registros comparando se A é igual a B. > > O GiST, por sua vez, generalizou mais a busca na árvore, permitindo > que você implemente indices que não sejam só um B-tree mas que possa > indexar outros tipos complexos como B+-tree, R-tree, etc também de > forma balanceada, mas de um modo que a chave não possua as restrições > do B-tree. Com o GIST voce pode usar algum operador especifico ja > implementado ou implementar um indice (codificando "na unha" em C) com > um tipo específico seu. Divagando um pouco, pense num jogo de > asteroides, imagine que de alguma forma você está armazenando no banco > poligonos que represente o contorno deles e deseja saber quais > asteroides estão colidindo com a sua nave, isso vai te remeter a uma > inevitável comparação entre as bordas destes poligonos, que estão ali, > armazenados em seu banco, mas não são simples inteiros, são eles dados > complexos que precisam ser comparados entre si de uma forma diferente > do que voce compara WHERE "1 < 2". O GIST te ajuda nisto e suas > chaves internas que apontam para as estruturas são baseadas em uma > tabela hash o que faz com que ele possa ser mais lento em condições > que uma mesma chave contenha vários possíveis resultados, caso este em > que os registros selecionados pré-selecionados são re-testados. > > O GIN, por sua vez não se baseia em hash, se baseia em B-tree e > permite voce implementar metodos de acesso para buscar dados dentro de > uma estrutura composta. Pense num JSON, algo como '{ "nome": "Joao" > }', considere-o uma estrutura complexa e imagina como selecionar todas > as linhas de uma tabela cujo um determinado campo do tipo JSON contem > uma chave chamada 'nome' cujo conteudo é "Joao". Isto é muito > diferente do que procurar por Joao com um LIKE, do tipo "campo_json > LIKE '%Joao%'" e é importante que, se voce tem uma estrutura definida > em um tipo composto, e tem operadores bem definidos que permitem voce > fazer comparações nestes tipos, use-os para o bem da humanidade. > > Enfim, paro por aqui porque posso estar mentindo demais e afinal era > para ser apenas um resumo. > > []s > -- > Dickson S. Guedes > mail/xmpp: [email protected] <javascript:;> - skype: guediz > http://github.com/guedes - http://guedesoft.net > http://www.postgresql.org.br > _______________________________________________ > pgbr-geral mailing list > [email protected] <javascript:;> > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- T.'.A.'.F.'., *Gerdan Rezende dos Santos * *Po*stgreSQL & EnterpriseDB Specialist, Support, Training & Services +55 (61) 9645-1525
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
