[firebase-br] Posição de campos em indices

Jonas jonas em hos.com.br
Qua Jul 1 10:58:27 -03 2009


agora confundi.. recebi as duas respostas a baixo, uma confirmando que haverá uma influencia se diferente a posicao dos campos, e outra supondo que não influenciaria.. :S

ou fui eu que misturei as coisas ?

===============================
Douglas Tosi
===============================
Claro.
A ordem vai determinar se o índice é útil ou não em uma determinada pesquisa.
As chaves que compõe um índice só podem ser lidas/comparadas a partir do começo.

Suponha o índice (A, B).
Não é possível usá-lo para uma pesquisa "where B=x". É necessário que
A seja comparado para que B possa ser comparado.

Este é só um exemplo simples mas com certeza tem livros/artigos de
bancos de dados que tratam disso a fundo.

===============================
Sandro Souza
===============================
Bom dia/tarde Jonas.

Grande Jonas, que eu saiba, se você criar um índice com N campos, e utilizar
esses mesmos N campos nas condições de sua consulta, "a ordem dos tratores
não alterará o viaduto", ou seja, não interferirá no desempenho.

Por exemplo, se você criar um índice para os campos A, B e C, nessa ordem,
não haverá diferença de performance se você utilizar condições como as
seguintes:

.....WHERE.....(A = ....) AND (B = ....) AND (C = .....) ....
.....WHERE.....(A = ....) AND (C = ....) AND (B = .....) ....
.....WHERE.....(B = ....) AND (A = ....) AND (C = .....) ....
.....WHERE.....(C = ....) AND (B = ....) AND (A = .....) ....

E quaisquer outra combinação. Mas haverá diferença, sem dúvida alguma, caso
você não utilize os primeiros campos desse índice, ou seja, o índice só será
utilizado caso você consulte pelos primeiros campos que o formam ou por
todos eles.

Se você filtrar por campos que formam esse índice, mas que não sejam os
primeiros (por exemplo: por B e C ou somente por B ou somente por C) então o
índice não será utilizado.

Espero ter ajudado mais que atrapalhado. :D




Mais detalhes sobre a lista de discussão lista