quarta-feira, 9 de abril de 2014

explain.depesz: Encontre a Causa da Lentidão em suas Consultas!

O site http://explain.depesz.com/ disponibiliza uma ferramenta bastante útil, que formata, extrai e a apresenta de forma relativamente simples o conteúdo dos planos de execução do postgresql, permitindo uma análise mais fácil do mesmo. A promessa deste aplicativo é ajudar a encontrar a causa da lentidão nas consultas realizadas.

 Site da ferramenta

Para utilizar a ferramenta, basta acessar o site, colar na caixa de texto o resultado do comando EXPLAIN , e acionar a opção para submeter o plano. O sistema processará o plano de execução e apresentará o resultado de forma gráfica, indicando em tons de amarelo e vermelho os pontos mais críticos em termos de custo de processamento. Desta forma, fica mais fácil fazer o ajuste de performance de consultas.

 Plano analisado

Já escrevi alguma coisa sobre o comando explain aqui, aqui e aqui.
 
Pessoalmente gostei da ferramenta, embora ainda não me tenha sido realmente útil. Peço que testem e me digam o que acharam.

quarta-feira, 2 de abril de 2014

As Funções GREATEST e LEAST

As funções GREATEST e LEAST recuperam, respectivamente, o maior e o menor valor não nulo em uma lista de valores, caso existam. São bastante úteis e, embora não sejam parte do padrão sql, são compatíveis com funções similares fornecidas por outros SGBDs.

Saliento que para recuperar o maior e menor valores em colunas de uma tabela, devem ser utilizadas as funções de agregação MAX e MIN, respectivamente.

* Exemplos

1 - Exemplo básico

SELECT GREATEST(1,2);








2 - Exemplo básico com três parâmetros
 
SELECT GREATEST(1,2, 3, 4);



3 - Exemplo básico com datas

SELECT GREATEST(current_date,current_date + 10);

4 - Exemplo básico com cálculo simples

SELECT GREATEST(1*2,2*1);



5 - Exemplo com valor nulo ignora o nulo

SELECT GREATEST(10,11,null);

6 - Exemplo gerando valor nulo

SELECT GREATEST(null,null);

7- Exemplo com dados textuais

SELECT GREATEST('ANA','CLA','AVA');



8 - Exemplo com timestamps

SELECT GREATEST(timestamp '2014-04-02 14:30:00', timestamp '2014-04-02 14:30:01');





9 - Exemplos do uso de LEAST

SELECT LEAST(1,2, 3, 4);
SELECT LEAST(current_date,current_date + 10);
SELECT LEAST(1*2,2*1);
SELECT LEAST(10, 11, null);
SELECT LEAST('ANA','CLA','AVA');
SELECT LEAST(timestamp '2014-04-02 14:30:00', timestamp '2014-04-02 14:30:01');

10 - Exemplo de comparação entre campos de uma mesma tabela

CREATE TEMP TABLE NOTA (codigo REAL, nota1 REAL, nota2 REAL, nota3 REAL);
INSERT INTO NOTA VALUES (1,10,9,8);
INSERT INTO NOTA VALUES (2,9.5,8,8.5);
INSERT INTO NOTA VALUES (3,1,2,3);

SELECT codigo, GREATEST(nota1, nota2, nota3) AS MAIOR_NOTA, LEAST(nota1, nota2, nota3) AS MENOR_NOTA FROM NOTA;