quinta-feira, 17 de maio de 2007

O Comando Explain III

A interpretação do comando EXPLAIN é importante e pode revelar surpresas.

No exemplo abaixo, comandos diferentes que retornam os mesmos dados apresentam resultado equivalente. Em termos práticos, qualquer das sintaxes traria os mesmos resultados e tomaria aproximadamante o mesmo tempo.

explain select nome, obs from continente where cod = 1 order by nome
Sort (cost=1.05..1.05 rows=1 width=634)
Sort Key: nome
-> Seq Scan on continente (cost=0.00..1.04 rows=1 width=634)
Filter: (cod = 1)

explain select nome, obs from continente where cod in (1) order by nome
Sort (cost=1.05..1.05 rows=1 width=634)
Sort Key: nome
-> Seq Scan on continente (cost=0.00..1.04 rows=1 width=634)
Filter: (cod = 1)

Já neste segundo exemplo, comandos diferentes que retornam os mesmos dados apresentam resultados diferentes. Em termos práticos, uma sintaxe poderia ser vantajosa em relação à outra, ainda que traga os mesmos dados. O ganho não chega a ser substancial, mas pode ser percebido.

explain select nome, obs from continente where cod = 1 or cod = 2 or cod = 3 order by nome
Sort (cost=1.06..1.07 rows=2 width=634)
Sort Key: nome
-> Seq Scan on continente (cost=0.00..1.05 rows=2 width=634)
Filter: ((cod = 1) OR (cod = 2) OR (cod = 3))

explain select nome, obs from continente where cod in (1, 2, 3) order by nome
Sort (cost=1.05..1.06 rows=2 width=634)
Sort Key: nome
-> Seq Scan on continente (cost=0.00..1.04 rows=2 width=634)
Filter: (cod = ANY ('{1,2,3}'::integer[]))

Alterações de sintaxe em comandos SQL baseadas na análise dos custos só são recomendadas se o custo for relevante e se o ganho de uma alternativa em relação a outra seja significativo.

Uma consulta SQL que seja executada muitas vezes ao dia é uma boa candidata a testes com o comando EXPLAIN.

Nenhum comentário: