[pgbr-geral] Duvida em escrita de SQL

2014-08-12 Por tôpico Pedro B. Alves
Pessoal gostaria de uma dica dos mais esperientes:

Qual a diferença para o banco na escrita destes dois SQLs?

SELECT twe.*
 , (SELECT descricao FROM tespecializacoes WHERE idespecializacao =
twe.idespecializacao) AS especializacao
  FROM tworkflowetapas twe


SELECT twe.*
  FROM tworkflowetapas twe
  LEFT JOIN tespecializacoes esp ON (twe.idespecializacao =
esp.idespecializacao)

Tem alguma diferença de performance, quebra de indices, etc?
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvida em escrita de SQL

2014-08-12 Por tôpico Flavio Henrique Araque Gurgel

Pessoal gostaria de uma dica dos mais esperientes:

Qual a diferença para o banco na escrita destes dois SQLs?

SELECT twe.*
  , (SELECT descricao FROM tespecializacoes WHERE idespecializacao =
twe.idespecializacao) AS especializacao
   FROM tworkflowetapas twe


SELECT twe.*
   FROM tworkflowetapas twe
   LEFT JOIN tespecializacoes esp ON (twe.idespecializacao =
esp.idespecializacao)

Tem alguma diferença de performance, quebra de indices, etc?


Dependendo da versão do PostgreSQL, se você fizer um EXPLAIN ANALYZE de 
cada uma delas, provavelmente o plano será exatamente o mesmo.


[]s
Flavio Gurgel
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvida em escrita de SQL

2014-08-12 Por tôpico Pedro B. Alves



 Dependendo da versão do PostgreSQL, se você fizer um EXPLAIN ANALYZE de
 cada uma delas, provavelmente o plano será exatamente o mesmo.


Utilizo a versão 9.3.x

executei o EXPLAIN..

SELECT twe.*
 , (SELECT descricao FROM tespecializacoes WHERE idespecializacao =
twe.idespecializacao) AS especializacao
  FROM tworkflowetapas twe


Seq Scan on tworkflowetapas twe  (cost=0.00..16.36 rows=14 width=30)
(actual time=0.040..0.142 rows=14 loops=1)
  SubPlan 1
-  Seq Scan on tespecializacoes  (cost=0.00..1.09 rows=1 width=218)
(actual time=0.003..0.004 rows=1 loops=14)
  Filter: (idespecializacao = twe.idespecializacao)
  Rows Removed by Filter: 7
Total runtime: 0.220 ms




SELECT twe.*
  FROM tworkflowetapas twe
  LEFT JOIN tespecializacoes esp ON (twe.idespecializacao =
esp.idespecializacao)


Seq Scan on tworkflowetapas twe  (cost=0.00..1.14 rows=14 width=30)
(actual time=0.013..0.016 rows=14 loops=1)
Total runtime: 0.068 ms
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvida em escrita de SQL

2014-08-12 Por tôpico Rafael Fialho
2014-08-12 11:05 GMT-03:00 Pedro B. Alves pedroalve...@gmail.com:



 Dependendo da versão do PostgreSQL, se você fizer um EXPLAIN ANALYZE de
 cada uma delas, provavelmente o plano será exatamente o mesmo.


 Utilizo a versão 9.3.x

 executei o EXPLAIN..

 SELECT twe.*
  , (SELECT descricao FROM tespecializacoes WHERE idespecializacao =
 twe.idespecializacao) AS especializacao
   FROM tworkflowetapas twe


 Seq Scan on tworkflowetapas twe  (cost=0.00..16.36 rows=14 width=30)
 (actual time=0.040..0.142 rows=14 loops=1)
   SubPlan 1
 -  Seq Scan on tespecializacoes  (cost=0.00..1.09 rows=1 width=218)
 (actual time=0.003..0.004 rows=1 loops=14)
   Filter: (idespecializacao = twe.idespecializacao)
   Rows Removed by Filter: 7
 Total runtime: 0.220 ms




 SELECT twe.*
   FROM tworkflowetapas twe
   LEFT JOIN tespecializacoes esp ON (twe.idespecializacao =
 esp.idespecializacao)


 Seq Scan on tworkflowetapas twe  (cost=0.00..1.14 rows=14 width=30)
 (actual time=0.013..0.016 rows=14 loops=1)
 Total runtime: 0.068 ms


O tempo da segunda consulta é menor, pois o banco está ignorando a junção.
Você tem que utilizar pelo menos algum campo da tabela para que os dois
planos de execução sejam realmente iguais, e retornem a mesma coisa.

[]'s
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvida em escrita de SQL

2014-08-12 Por tôpico Osvaldo Kussama
2014-08-12 11:05 GMT-03:00, Pedro B. Alves pedroalve...@gmail.com:



 Dependendo da versão do PostgreSQL, se você fizer um EXPLAIN ANALYZE de
 cada uma delas, provavelmente o plano será exatamente o mesmo.


 Utilizo a versão 9.3.x

 executei o EXPLAIN..

 SELECT twe.*
  , (SELECT descricao FROM tespecializacoes WHERE idespecializacao =
 twe.idespecializacao) AS especializacao
   FROM tworkflowetapas twe


 Seq Scan on tworkflowetapas twe  (cost=0.00..16.36 rows=14 width=30)
 (actual time=0.040..0.142 rows=14 loops=1)
   SubPlan 1
 -  Seq Scan on tespecializacoes  (cost=0.00..1.09 rows=1 width=218)
 (actual time=0.003..0.004 rows=1 loops=14)
   Filter: (idespecializacao = twe.idespecializacao)
   Rows Removed by Filter: 7
 Total runtime: 0.220 ms




 SELECT twe.*
   FROM tworkflowetapas twe
   LEFT JOIN tespecializacoes esp ON (twe.idespecializacao =
 esp.idespecializacao)


 Seq Scan on tworkflowetapas twe  (cost=0.00..1.14 rows=14 width=30)
 (actual time=0.013..0.016 rows=14 loops=1)
 Total runtime: 0.068 ms



Creio que no segundo SELECT faltou esp.descricao na lista de campos,
senão não haveria necessidade da tabela tespecializacoes (como
concluiu o otimizador).

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvida em escrita de SQL

2014-08-12 Por tôpico Bruno Silva
On Tue, Aug 12, 2014 at 11:05 AM, Pedro B. Alves pedroalve...@gmail.com
wrote:

 SELECT twe.*
   FROM tworkflowetapas twe
   LEFT JOIN tespecializacoes esp ON (twe.idespecializacao =
 esp.idespecializacao)


Por que isso se você não usa nada da tabela tespecializacoes e ainda a usa
como LEFT JOIN?

Bruno E. A. Silva.
Analista de Sistemas.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvida em escrita de SQL

2014-08-12 Por tôpico Pedro B. Alves

 Creio que no segundo SELECT faltou esp.descricao na lista de campos,
 senão não haveria necessidade da tabela tespecializacoes (como
 concluiu o otimizador).


Isso mesmo.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvida em escrita de SQL

2014-08-12 Por tôpico Wellington

Pessoal gostaria de uma dica dos mais esperientes:

Qual a diferença para o banco na escrita destes dois SQLs?

SELECT twe.*
  , (SELECT descricao FROM tespecializacoes WHERE idespecializacao =
twe.idespecializacao) AS especializacao
   FROM tworkflowetapas twe

SELECT twe.*
   FROM tworkflowetapas twe
   LEFT JOIN tespecializacoes esp ON (twe.idespecializacao =
esp.idespecializacao)

Tem alguma diferença de performance, quebra de indices, etc?


Acredito que o LEFT JOIN valeria a pena se fosse para buscar 2 ou mais 
campos na tabela tespecializacoes, o SQL abaixo seria menos performatico, ou 
estou errado ?


SELECT twe.*
 , (SELECT descricao FROM tespecializacoes WHERE 
idespecializacao = twe.idespecializacao) AS especializacao,
 , (SELECT outro_campo FROM tespecializacoes WHERE 
idespecializacao = twe.idespecializacao) AS exemplo
  FROM tworkflowetapas twe 


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral