2012/9/4 Flavio Henrique Araque Gurgel <[email protected]>

>
> On 03-09-2012 22:08, Cesar Moraes wrote:
> > Legal Flavio obrigado pela resposta.
> >
> > Então eu não posso pedir para ele montar a árvore ao contrario?
> >
> > E qual a diferença de criar um index ASC ou DESC?
>
> Desculpe-me, eu havia entendido sua pergunta errado.
>
> Você pode criar o índice em ordem ascendente ou descendente.
> Nunca fiz testes, mas teoricamente, se a maioria de suas consultas fizer
> ORDER BY ... DESC ou se a cláusula WHERE pedir na maioria dos casos os
> dados maiores de valor, o uso de índice descendente iriam privilegiar
> essas consultas.
>

Na prática, nunca testei, nem tenho relatos de ganhos nesses casos. Pode
> ser que alguém na lista tenha.
>
>
O link [1], que o Euler passou, explica isso bem. O PostgreSQL pode fazer
uma varredura no índice ao contrário (de cima para baixo, se pensarmos numa
árvore), logo se você tem ou não a cláusula DESC num índice de um único
campo não ajuda em nada. Mas, também do link, se você tem algo menos comun
(ou não) como uma consulta assim:

SELECT ... ORDER BY x ASC, y DESC;

Não adianta ter um índice com x e y (ambos em mesma ordem), pois mesmo
lendo ao contrário não tem a ordenação esperada, logo precisariamos de um
dos seguintes:

CREATE INDEX ... (x ASC, y DESC)
ou
CREATE INDEX ... (x DESC, y ASC)

Só pra acrescentar, se você usar um ORDER BY ... DESC num índice ASC e usar
o EXPLAIN, pode ver o seguinte: "Index Scan Backward using idx_bla ... ".
Ou seja, ele lê o índice ao contrário.


[1] http://www.postgresql.org/docs/9.2/static/indexes-ordering.html

--
Matheus de Oliveira
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a